[英]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 Sierra的SCJP书中读到,JVM要求底层操作系统为每个Java线程创建一个新的OS线程。
因此,由底层操作系统来决定如何在可用CPU之间平衡Java(和任何其他类型)线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.