简而言之:
是否值得努力在应用程序上添加多线程可伸缩性(垂直可伸缩性),该应用程序将始终在诸如Tandem HPNS(水平可伸缩)的MPP基础架构中运行?
现在,让我更深入一点:
我在许多地方看到过使用Java的MPP(大规模并行处理)下的开发倾向于认为,如果它是Java,你可以使用Java提供的所有内容(你知道,写曾经在任何地方运行!)其中多线程库(此类线程,AKKA,线程池等)可以通过使用并行性来加速性能,从而为您提供很多帮助。
忘记这个事实,如果它是MPP,它是水平可扩展的,这意味着如果你需要一个更快的应用程序,你必须设计它来运行应用程序的多个副本,每个副本在不同的处理器上。
另一方面,我们有SMP( Symmetric Multi-processing )基础架构(这里我们有任何Windows,Linux,UNIX就像环境),在这些你不喜欢不得不担心,因为可伸缩性是垂直的,你可以有更多的线程,它们的执行将分布在操作系统可用的不同内核上(这里我同意使用多线程库)
所以,考虑到这一点,我的问题是,如果需要创建一个应用程序,它将执行大量的数据和大量的验证和其他要求,其中使用并行性将有助于改善加载时间,但是,它必须在MPP环境下运行(这样的Tandem HPNS )。
开发人员是否应该花时间添加多线程库以增加并行性和并发性?
只是几个旁注:
1)我不是说SMP更好或者MPP更好,它们只是不同的基础设施;我的观点仅仅是在MPP环境中使用多线程库,这使得在MPP上使用多线程的应用程序只使用服务器可能具有的N Cpus中的一个CPU。
2)我不是说MPP服务器不支持多线程库,你可以在HPNS上运行多线程,但即使你有20个线程,也没有真正的并行性,因为一个线程是阻止其他人;除非您在不同的CPU上分发应用程序(运行多个副本)。
答案 0 :(得分:1)
不,我不认为在应用程序上添加多线程可伸缩性是有意义的,因为tandem不提供内核级线程,所以即使你编写多线程应用程序它也不会带来任何好处。
即使是串联HPNS Java也提供了符合Java规范的多线程,但其性能无法与Linux或支持内核级线程的任何其他操作系统相媲美。 由于其硬件冗余,串联的实际目的是HA可用性。