繁体   English   中英

如何使Java与线程一起使用多个核心?

[英]how to make Java uses multiple cores with threads?

这与出现的问题类似: 如何确保Java线程在不同的核心上运行 但是,在Java中可能会有很多进展,而且,我找不到我在该问题中寻找的答案。

我刚刚写完一个多线程程序。 该程序产生了几个线程,但它似乎没有使用多个线程。 该方案更快(我并行的东西,这使得它更快),但它绝对不会使用所有可用的核心,通过运行“顶”判断。

有任何想法吗? 这是预期的行为吗?

一般代码结构如下:

   for (some values in i)
   {
        start a thread of instantiated as MyThread(i)
        (this thread uses heavily ConcurrentHashMap and arrays and basic arithmetic, no IO)
        add the thread to a list T
   }

   foreach (thread in T)
   {
        do thread.join()
   }

如果它几乎完全是一个CPU的100%,它可能意味着你真的拥有

  • 一个核心线程正在完成所有工作而其他人没有这么做。
  • 您锁定的一个资源,只有一个线程有机会运行。

如果您使用大约一个CPU,那么这可能意味着这是您的CPU所具有的所有工作,因为您正在等待IO(网络和/或磁盘)等内容

我建议你看一下VisualVM中你的线程的状态。 它将帮助您确定正在运行的线程,并为您提供理想的行为模式。 我还建议你使用CPU分析器来帮助找到你的瓶颈。

我想我在Katherine SierraSCJP书中读到,JVM要求底层操作系统为每个Java线程创建一个新的OS线程。

因此,由底层操作系统来决定如何在可用CPU之间平衡Java(和任何其他类型)线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM