Java 为什么公共池是';s并行性与可用处理器的数量不一样吗?

Java 为什么公共池是';s并行性与可用处理器的数量不一样吗?,java,threadpool,fork-join,forkjoinpool,Java,Threadpool,Fork Join,Forkjoinpool,我有以下实现 @Test void concurrency() { System.out.println("#cores : " + Runtime.getRuntime().availableProcessors()); System.out.println("#pool : " + ForkJoinPool.getCommonPoolParallelism()); } 输出 #cores : 8 #pool : 7 为什么这两个数字

我有以下实现

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

#cores : 8
#pool : 7
为什么这两个数字不同?

内核数(N)-1被认为是ForkJoinPool的最佳值。
因此,您有1个核心备件用于其他任务,如:
对于操作系统,
对于主线程,
用于垃圾收集等


您不太可能在池的工作中始终使用所有核心。因此,如果您再创建一个线程,您将有更多的上下文切换,这将降低整个执行时间。

我认为对于池使用N-1个线程是一种非常常见的做法,因为您还有一个线程正在启动池。您是否检查了javadoc中可用的方法?