MPP架构上的多线程应用
Multithread applications on MPP architecture
简而言之:
在 Tandem HPNS(水平可扩展)等 MPP 基础设施中 运行 始终在应用程序上添加多线程可扩展性(垂直可扩展性)是否值得?
现在,让我更深入一点:
我在很多地方看过MPP下的开发(Massively Parallel Processing)使用Java倾向于认为,如果是Java就可以使用 Java 提供的所有内容(你知道,写一次 运行 任何地方!),其中多线程库( 此类线程、AKKA、线程池等) 可以通过使用并行加速性能来提供很大帮助。
忘记这个事实,如果它是 MPP,它是水平可扩展的,这意味着如果您需要更快的应用程序,您必须将其设计为 运行 多个应用程序副本,每个副本在不同的处理器上。
另一方面,我们有 SMP(对称多处理)基础设施(这里我们有任何 windows、Linux , UNIX like environment), 在这些你不必担心,因为可扩展性是垂直的,你可以有更多的线程,它们的执行将分布在不同的核心上 OS 可用(这里我同意使用多线程库)。
所以,考虑到这一点,我的问题是,如果需要创建一个应用程序来执行大量数据负载的大量验证和其他要求,其中使用并行性将有助于很多可以改善加载时间,但是,它必须 运行 在 MPP 环境下(such Tandem HPNS)。
开发人员是否应该花时间添加多线程库以增加并行性和并发性?
只是一些旁注:
1)我并不是说SMP更好或者MPP更好,它们只是不同的基础架构;我的观点仅涉及在 MPP 环境中使用多线程库,因为在 MPP 上使用多线程的应用程序将仅使用服务器可能拥有的 N Cpus 中的一个 CPU。
2) 我不是说 MPP 服务器不支持多线程库,你可以在 HPNS 上有多线程 运行ning,但即使你有 20 个线程,没有真正的并行性,因为一个线程阻塞了其他线程;除非您在不同的 CPUs.
上分发了应用程序(多份 运行ning)
不,我认为在始终 运行 串联的应用程序上添加多线程可伸缩性没有意义,因为串联不提供内核级线程,因此即使您编写多线程应用程序,它也不会提供任何好处。
Even tandem HPNS Java 根据 Java 规范提供多线程,但其性能无法与 linux 或任何其他支持内核级线程的 OS 相提并论。
由于其硬件冗余,串联的实际目的是 HA 可用性。
简而言之:
在 Tandem HPNS(水平可扩展)等 MPP 基础设施中 运行 始终在应用程序上添加多线程可扩展性(垂直可扩展性)是否值得?
现在,让我更深入一点:
我在很多地方看过MPP下的开发(Massively Parallel Processing)使用Java倾向于认为,如果是Java就可以使用 Java 提供的所有内容(你知道,写一次 运行 任何地方!),其中多线程库( 此类线程、AKKA、线程池等) 可以通过使用并行加速性能来提供很大帮助。
忘记这个事实,如果它是 MPP,它是水平可扩展的,这意味着如果您需要更快的应用程序,您必须将其设计为 运行 多个应用程序副本,每个副本在不同的处理器上。
另一方面,我们有 SMP(对称多处理)基础设施(这里我们有任何 windows、Linux , UNIX like environment), 在这些你不必担心,因为可扩展性是垂直的,你可以有更多的线程,它们的执行将分布在不同的核心上 OS 可用(这里我同意使用多线程库)。
所以,考虑到这一点,我的问题是,如果需要创建一个应用程序来执行大量数据负载的大量验证和其他要求,其中使用并行性将有助于很多可以改善加载时间,但是,它必须 运行 在 MPP 环境下(such Tandem HPNS)。
开发人员是否应该花时间添加多线程库以增加并行性和并发性?
只是一些旁注:
1)我并不是说SMP更好或者MPP更好,它们只是不同的基础架构;我的观点仅涉及在 MPP 环境中使用多线程库,因为在 MPP 上使用多线程的应用程序将仅使用服务器可能拥有的 N Cpus 中的一个 CPU。
2) 我不是说 MPP 服务器不支持多线程库,你可以在 HPNS 上有多线程 运行ning,但即使你有 20 个线程,没有真正的并行性,因为一个线程阻塞了其他线程;除非您在不同的 CPUs.
上分发了应用程序(多份 运行ning)不,我认为在始终 运行 串联的应用程序上添加多线程可伸缩性没有意义,因为串联不提供内核级线程,因此即使您编写多线程应用程序,它也不会提供任何好处。
Even tandem HPNS Java 根据 Java 规范提供多线程,但其性能无法与 linux 或任何其他支持内核级线程的 OS 相提并论。 由于其硬件冗余,串联的实际目的是 HA 可用性。