图片中的“ CPU”代表“核心”吗?

问题描述 投票:0回答:1

此图显示了Java程序如何使用内核线程。我的困惑是图片中的“ CPU”是否代表“核心”,也就是说,如果我的cpu有4个核心并支持4个线程,那么我在程序中创建的java线程可以最终与这4个核心匹配,并且每个内核中每次只有一个运行线程。此外,cpu有4个内核并支持8个线程,这是否意味着每个内核每次都有2个正在运行的线程? enter image description here

java multithreading cpu
1个回答
0
投票

在此特定图片中,“ CPU”的确表示“核心”。但是,此图片已简化。

常规CPU支持每个内核一次运行1个线程。

[所有现代CPU都有Hyperthreading,这意味着每个内核一次“支持” 2个线程。从这个特定意义上讲,4个内核可以支持8个线程。我将“支持”用引号引起来,因为该实现实际上并没有同时运行2件事-那只是2个核心。相反,它的工作是交织2个线程,但是具有2组寄存器,因此在2个线程之间切换时,不必从内存中加载寄存器。

您所拥有的图片根本不考虑超线程,并且有充分的理由-它试图向您介绍线程,而不是CPU实现。

请注意,如果您拥有1、4或60,000个线程,这并不意味着它们将在内核之间平均分配。线程可以在不同的时间在不同的内核上运行,并且运行时(Java)可以为某些线程设置affinity

这意味着您的所有线程有可能在1个内核上运行,或者每个线程在不同的内核上运行,或任何其他组合。

© www.soinside.com 2019 - 2024. All rights reserved.