我正在使用Java 的 fork-join 框架来处理 CPU 密集型计算。
我已经稍微调整了“顺序阈值”(用于确定是创建子任务还是完成工作),但令我失望的是,从单线程到 4+4 内核仅使整体性能翻了一番。该池确实报告了 8 个 CPU,当我手动设置 2、3、4、.. 时,我看到性能逐渐提高,但仍然达到单线程吞吐量的两倍左右。此外,该 Java 进程的 Linux 系统活动监视器在 50% 左右徘徊。
另一个非常可疑的事实是,当我启动多个 Java 进程时,集体吞吐量更加一致(几乎比单个线程快 4 倍)并且系统活动监视器显示更高的 CPU 使用率。
是否有可能在 Java、Linux 或 fork/join 框架中存在不允许完全 CPU 使用的限制?有什么建议或类似的经历吗?
注意。这是在具有 4 个内核和 4 个超线程内核的 Intel 3770 CPU 上,在 Linux Mint 机器上运行 Oracle Java 7r13。