问题描述
我有以下实现
@Test
void concurrency() {
System.out.println("#cores : " + Runtime.getRuntime().availableProcessors());
System.out.println("#pool : " + ForkJoinPool.getCommonPoolParallelism());
}
#cores : 8
#pool : 7
为什么这两个数字不同?
解决方法
核心数 (N) - 1 被认为是 ForkJoinPool 的最佳选择。
因此,您有 1 个备用核心用于其他任务,例如:
对于操作系统,
对于主线程,
用于垃圾收集等
您不太可能在池的工作中始终利用所有核心。因此,如果您再创建一个线程,就会有更多的上下文切换,这会减慢整个执行时间。