我在想,如果我们的算法是顺序执行的,但必须利用多核处理器,那我们是否需要让算法变成多线程?还是说即使我们的算法是顺序的,JVM也会利用多个核心呢?
更新:
相关问题:
我在想,如果我们的算法是顺序执行的,但必须利用多核处理器,那我们是否需要让算法变成多线程?还是说即使我们的算法是顺序的,JVM也会利用多个核心呢?
更新:
相关问题:
我不相信任何当前的、生产级别的JVM实现会执行自动多线程。它们可能会使用其他核心进行垃圾回收和一些其他的系统维护工作,但如果您的代码按顺序表达,要想自动并行化它并仍然保持精确的语义是很困难的。
也许有一些试图将JIT检测到的尴尬并行的代码区域并行化的实验性/研究性JVM,但对于生产系统,我还没有听说过这样的东西。即使JIT能够检测到这种情况,它的效果可能还不如在设计阶段就为并行性进行编码。 (编写顺序代码时,您可能会做出会意外地妨碍自动并行化的设计决策。)
为了充分利用您可用的多个内核,您的实现需要支持多线程。
整个系统可以为每个正在运行的应用程序或服务使用单个内核。但是,除非另有规定,否则每个运行的应用程序将只使用单个线程/内核。
我认为,如果不编写高效的代码,使用多线程算法就不能有效地利用多核处理器。这里有一篇很好的文章,讲述如何为开发人员充分利用多核处理器。