Java 7';s fork/join框架没有使用所有可用的CPU电源
我用它来处理CPU密集型计算 我对“顺序阈值”(用于确定是创建子任务还是执行工作)做了一些调整,但令我失望的是,从单线程到4+4内核的性能只提高了一倍左右。该池报告8个CPU,当我手动设置2,3,4时,。。我看到性能逐渐提高,但仍然是单线程吞吐量的两倍。另外,对于该Java进程,Linux系统活动监视器徘徊在50%左右 另一个非常可疑的事实是,当我启动多个Java进程时,总体吞吐量更一致(几乎比单个线程快4倍),并且系统活动监视器显示更高的CPU使用率 Java、Linux或fork/join框架中是否存在不允许完全使用CPU的限制?有什么建议或类似的经历吗Java 7';s fork/join框架没有使用所有可用的CPU电源,java,multithreading,performance,java-7,fork-join,Java,Multithreading,Performance,Java 7,Fork Join,我用它来处理CPU密集型计算 我对“顺序阈值”(用于确定是创建子任务还是执行工作)做了一些调整,但令我失望的是,从单线程到4+4内核的性能只提高了一倍左右。该池报告8个CPU,当我手动设置2,3,4时,。。我看到性能逐渐提高,但仍然是单线程吞吐量的两倍。另外,对于该Java进程,Linux系统活动监视器徘徊在50%左右 另一个非常可疑的事实是,当我启动多个Java进程时,总体吞吐量更一致(几乎比单个线程快4倍),并且系统活动监视器显示更高的CPU使用率 Java、Linux或fork/join框
注意。这是在一个Intel 3770 CPU上,有4个内核和4个超线程内核,在Linux Mint box上运行Oracle Java 7r13。谢谢大家的想法和答案!根据您的建议,我得出结论,问题不在于框架本身,并继续进行更多的测试,发现几分钟后cpu负载下降到15% 事实证明,Random(我广泛使用)在多线程设置中的性能很差。解决方案是使用ThreadLocalRandom.current().nextXXX()代替。我现在已经达到了80%的一致使用率(还剩下一些连续的段落)。好极了
再次感谢您让我走上正确的道路。要了解fork join设置中发生了什么,您需要找出瓶颈所在。除此之外,仅仅根据你问题中的信息,我们真的很难提出具体的建议。有趣的情况。关于并行化加速,这是理论上的限制:看起来像是大量阻塞系统调用使线程处于等待状态,从而降低了kernel@Ray您应该查找已经为FJ编写的性能测试。在你的机器上运行它,如果你看到你的计算机上有100%的利用率,很有可能是你的代码。发布一些代码。你的compute()看起来像什么。只是一点代码,不是每一步。