例如,我有4个核心处理器和8个线程。我很确定,线程数量与Java线程数量没有直接关系。
根据我的理解,您正在谈论4个实际内核和每个内核2个超线程从技术上来说,它的意思是8个虚拟内核(vCpu)。这意味着8个线程可以在没有任何上下文切换的情况下并行执行(让我们在这里不考虑超线程的复杂性)
Java线程是一对一映射,而OS线程是NOT与硬件线程一对一映射。这意味着对于thread allocation
和context switch
,Java取决于运行OS
的基础JVM
。 OS可以创建所需数量的线程,这些线程可以在处理器上的任何可用vCPUs
上运行。随着OS线程的不断增加,如果线程NOT
执行IO bound
工作,将会有更多的上下文切换并且性能可能会受到影响。