【发布时间】:2016-05-20 11:45:02
【问题描述】:
简而言之:
是否值得为始终在诸如 Tandem HPNS(水平可扩展)这样的 MPP 基础架构中运行的应用程序添加多线程可扩展性(垂直可扩展性)?
现在,让我再深入一点:
我在很多地方看到 MPP 下的开发(大规模并行处理)使用 Java 倾向于认为,如果是 Java,你可以使用 Java 提供的所有东西(你知道,写一旦在任何地方运行!),其中多线程库(诸如线程、AKKA、线程池等)可以通过使用并行性提高性能来提供很大帮助。
忘记一个事实,如果它是 MPP,它是水平可扩展的,这意味着如果你需要一个更快的应用程序,你必须将它设计为运行应用程序的多个副本,每个副本在不同的处理器上。
另一方面,我们有 SMP(对称多处理)基础架构(我们有任何类似 Windows、Linux、UNIX 的环境),在这些你不需要'不必担心,因为可扩展性是垂直的,您可以拥有更多线程,它们的执行将分布在操作系统可用的不同内核上(我同意使用多线程库) .
因此,考虑到这一点,我的问题是,如果需要创建一个应用程序来执行具有大量验证和其他要求的大量数据,其中使用并行性将有助于提高加载时间,但是,它必须在 MPP 环境下运行(例如 Tandem HPNS)。
开发者是否应该花时间添加多线程库以增加并行性和并发性?
只是一些旁注:
1) 我并不是说 SMP 更好或 MPP 更好,它们只是不同的基础架构;我的观点只是在 MPP 环境中使用多线程库,因为在 MPP 上使用多线程的应用程序将只使用服务器可能拥有的 N Cpus 的一个 CPU。
2) 我并不是说 MPP 服务器不支持多线程库,你可以在 HPNS 上运行多线程,但即使你有 20 个线程,也没有真正的并行性,因为一个线程是阻止其他人;除非您将应用程序分布在不同的 CPU 上(运行多个副本)。
【问题讨论】:
-
这是一个非常笼统和广泛的问题;可能只会让你投反对票和关闭请求。
-
感谢 Jägermeister 的评论/建议,您当然是对的,但我真的认为这应该记录在某个地方,因为我看到大多数在 MPP 基础架构下工作的开发人员都没有意识到这些差异两种架构之间会导致性能问题,并且在大多数情况下会浪费资源、时间和金钱;我会尝试完善我的问题,以便更好地了解情况本身。
标签: java scalability java-threads infrastructure tandem