Java 7的fork / join框架不使用所有可用的CPU功率

时间:2013-03-14 16:03:38

标签: java multithreading performance java-7 fork-join

我正在使用Java's fork-join framework来处理CPU密集型计算。

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

同样非常可疑的是,当我启动多个Java进程时,集体吞吐量更加一致(几乎比单个线程快4倍),而System Activity监视器显示更高的CPU使用率。

Java,Linux或fork / join框架是否存在限制,这会限制CPU的全部使用?有任何建议或类似经历吗?

NB。这是在Intel 3770 CPU上,具有4个内核和4个超线程内核,在Linux Mint盒上运行Oracle Java 7r13。

1 个答案:

答案 0 :(得分:1)

感谢大家的想法和答案!根据你的建议,我得出结论,问题不是框架本身,而是进行了一些测试,发现几分钟后cpu负载下降到15%!

事实证明,随机(我广泛使用)在多线程设置中性能很差。解决方案是使用ThreadLocalRandom.current()。nextXXX()代替。我现在达到80%的使用率(仍然有一些连续的段落)。甜!

再次感谢您让我走上正轨。