此图显示Java程序如何使用内核线程。 我的困惑是图片中的“ CPU”是否代表“核心”,也就是说,如果我的cpu有4个核心并支持4个线程,那么我在程序中创建的java线程可以最终与这4个核心匹配,并且每个内核中每次只有一个运行线程。此外,cpu有4个内核并支持8个线程,这是否意味着每个内核每次都有2个正在运行的线程?
答案 0 :(得分:0)
在此特定图片中,“ CPU”的确表示“核心”。但是,此图片已简化。
常规CPU支持每个内核一次运行1个线程。
所有现代CPU都有Hyperthreading,这意味着每个内核一次“支持” 2个线程。从这个特定意义上讲,4个内核可以支持8个线程。我将“支持”用引号引起来,因为实现实际上并没有同时运行2件事-那将只是2个核心。相反,它的工作是交织2个线程,但是具有2组寄存器,因此在2个线程之间切换时,不必从内存中加载寄存器。
您所了解的图片根本不考虑超线程,并且有一个很好的理由-它试图向您介绍线程,而不是CPU实现。
请注意,如果您拥有1、4或60,000个线程,这并不意味着它们将在内核之间平均分配。线程可以在不同的时间在不同的内核上运行,运行时(Java)可以为某些线程设置affinity。
这意味着您所有的线程都可能在1个内核上运行,或者每个线程在不同的内核上运行,或者任何其他组合。