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