0

简而言之:

是否值得为始终在诸如 Tandem HPNS(水平可扩展)这样的 MPP 基础架构中运行的应用程序添加多线程可扩展性(垂直可扩展性)?

现在,让我更深入地了解:

我在很多地方看到使用 Java 的 MPP(大规模并行处理)下的开发倾向于认为,如果是 Java,你可以使用 Java 提供的所有东西(你知道,一次编写在任何地方运行!)其中多线程库(这样的线程, AKKA、线程池等)可以通过使用并行性提高性能来提供很大帮助。

忘记一个事实,如果它是 MPP,它是水平可扩展的,这意味着如果你需要一个更快的应用程序,你必须将它设计为运行应用程序的多个副本,每个副本在不同的处理器上。

另一方面,我们有 SMP(对称多处理)基础设施(这里我们有任何 windows、Linux、UNIX 等环境),在这些基础设施中您不必担心,因为可扩展性是垂直的,您可以拥有更多它们的执行将分布在操作系统可用的不同内核上的线程(这里我同意使用多线程库)。

因此,考虑到这一点,我的问题是,如果需要创建一个应用程序,该应用程序将执行具有大量验证和其他要求的大量数据,其中使用并行性将有助于改善负载时间,但是,它必须在 MPP 环境下运行(例如 Tandem HPNS)。

开发人员是否应该花时间添加多线程库以增加并行性和并发性?

只是一些旁注:

1) 我并不是说 SMP 更好或 MPP 更好,它们只是不同的基础设施;我的观点只是在 MPP 环境中使用多线程库,因为在 MPP 上使用多线程的应用程序将仅使用服务器可能拥有的 N Cpus 的一个 CPU。

2) 我并不是说MPP服务器不支持多线程库,你可以在HPNS上运行多线程,但即使你有20个线程,也没有真正的并行性,因为一个线程阻塞了其他线程;除非您将应用程序分发(运行多个副本)在不同的 CPU 上。

4

1 回答 1

1

不,我认为在将始终在串联上运行的应用程序上添加多线程可伸缩性是没有意义的,因为串联不提供内核级线程,因此即使您编写多线程应用程序也不会带来任何好处。

甚至串联 HPNS Java 也根据 Java 规范提供多线程,但其性能无法与 linux 或任何其他支持内核级线程的操作系统相媲美。串联的实际目的是 HA 可用性,因为它具有硬件冗余。

于 2016-05-20T12:12:00.287 回答