Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 7';s fork/join框架没有使用所有可用的CPU电源_Java_Multithreading_Performance_Java 7_Fork Join - Fatal编程技术网

Java 7';s 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框

我用它来处理CPU密集型计算

我对“顺序阈值”(用于确定是创建子任务还是执行工作)做了一些调整,但令我失望的是,从单线程到4+4内核的性能只提高了一倍左右。该池报告8个CPU,当我手动设置2,3,4时,。。我看到性能逐渐提高,但仍然是单线程吞吐量的两倍。另外,对于该Java进程,Linux系统活动监视器徘徊在50%左右

另一个非常可疑的事实是,当我启动多个Java进程时,总体吞吐量更一致(几乎比单个线程快4倍),并且系统活动监视器显示更高的CPU使用率

Java、Linux或fork/join框架中是否存在不允许完全使用CPU的限制?有什么建议或类似的经历吗


注意。这是在一个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()看起来像什么。只是一点代码,不是每一步。