简而言之::
是否值得将多线程可伸缩性(垂直可伸缩性)添加到将始终运行在MPP基础设施(如串联HPNS (水平可伸缩性))中的应用程序?
现在,让我再深入一点:
我在许多地方见过使用Java的MPP (大规模并行处理)下的开发,通常认为,如果是Java,您可以使用Java提供的所有内容(您知道,编写一次运行在任何地方!)其中多线程库(如线程、AKKA、线程池等)通过使用并行性来提高性能,可以帮助很多人。
忘记了,如果它是MPP,它是水平可伸缩的,这意味着如果您需要一个更快的应用程序,您必须设计它来运行应用程序的多个副本,每个副本在一个不同的处理器上。
另一方面,我们有SMP (对称多处理)基础设施(这里有任何窗口、Linux和类似UNIX的环境),在这些基础设施中,您不必担心,因为可伸缩性是垂直的,您可以有更多的线程,它们的执行将分布在操作系统可以使用的不同核心上(在这里,我同意使用多线程库)。
因此,考虑到这一点,我的问题是,如果需要创建一个将执行大量数据负载的应用程序,在这些应用程序中使用并行性将大大提高加载时间,但是它必须在MPP环境下运行(这类串联HPNS)。
开发人员应该在添加多线程库上投入时间来添加并行性和并发性吗?
只是几个旁注:
1)我并不是说SMP更好或者MPP更好,它们只是不同的基础设施;我的观点仅仅是在MPP环境中使用多线程库,这给出了一个事实,即在MPP上使用多线程的应用程序将只使用服务器可能拥有的N CPU中的一个CPU。
2)我并不是说MPP服务器不支持多线程库,您可以在HPNS上运行多线程,但是即使您有20个线程,也没有真正的并行性,因为其中一个线程阻塞了其他线程;除非您在不同的CPU上分发应用程序(几个副本)。
发布于 2016-05-20 12:12:00
不,我认为在总是以串连方式运行的应用程序上添加多线程可伸缩性是没有意义的,因为串联不提供内核级别的线程,所以即使您编写多线程应用程序,它也不会带来任何好处。
甚至连HPNS Java也按照Java提供多线程,但它的性能不能与linux或任何其他支持内核级线程的操作系统相比。串列的实际用途是HA的可用性,因为它的硬件冗余。
https://stackoverflow.com/questions/37345891
复制相似问题