为什么公共池的并行度与可用处理器的数量不同?

Why is the common pool's parallelism not the same as the number of available processors?

我有以下实现

@Test
void concurrency() {
    System.out.println("#cores : " + Runtime.getRuntime().availableProcessors());
    System.out.println("#pool : " + ForkJoinPool.getCommonPoolParallelism());
}

输出

#cores : 8
#pool : 7

为什么这两个数字不同?

核心数 (N) - 1 被认为是 ForkJoinPool 的最佳选择。
所以你有 1 个备用核心用于其他任务,例如:
对于操作系统,
对于主线程,
用于垃圾收集等

您不太可能在所有时间都利用所有核心来处理池的工作。因此,如果您再创建一个线程,就会有更多的上下文切换,这会减慢整个执行时间。