我只是想知道如果必须使用多核处理器我们是否真的需要算法是多线程的,或者jvm是否会使用多核甚至 - 尽管我们的算法是顺序的?
更新
相关问题:
答案 0 :(得分:18)
我不相信任何当前的生产JVM实现都会执行自动多线程。他们可能会使用其他内核进行垃圾收集和其他一些内务处理,但如果您的代码按顺序表示,则很难自动并行化并保持精确的语义。
可能是一些实验/研究JVM,试图并行化JIT可以发现的令人尴尬的并行代码区域,但我还没有听说过类似的生产系统。即使JIT 发现发现了这种情况,它也可能不如设计代码并行性。 (顺序编写代码,您很容易最终做出设计决策,这会无意中妨碍自动并行。)
答案 1 :(得分:4)
您的实现需要是多线程的,以便利用您可以使用的多个核心。
您的系统作为一个整体可以为每个正在运行的应用程序或服务使用单个核心。但是,除非另有说明,否则每个正在运行的应用程序都将在单个线程/核心上运行。
答案 2 :(得分:1)
我不认为使用多线程算法会有效地使用多核处理器,除非编码有效。这篇文章讨论了如何为开发人员使用多核处理器 -
答案 3 :(得分:1)
Java不会自动将程序拆分为线程。目前,如果您希望代码能够同时在多个内核上运行,则需要通过线程或其他一些机制告诉计算机如何将代码拆分为任务以及程序中任务之间的依赖关系。但是,其他任务可以在其他内核上同时运行,因此如果您同时运行其他内容,您的程序仍可以在多核处理器上运行得更快。
使当前代码可以并行化的一种简单方法是使用JOMP来并行化循环和处理能力强化,轻松实现代码的部分化。