线程是在CPU上运行还是在核心上运行?

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

单线程是运行在单核还是单CPU上?

另外,我有 i7。它说我有 4 个核心,但有 8 个线程。核心和线程不是1-1的比例吗?怎么翻倍了?

multithreading cpu cpu-architecture cpu-cores hyperthreading
4个回答
6
投票

在此上下文中,CPU 是一个物理芯片,可以与计算机上的其他 CPU 分开安装(如果有多个 CPU 的地方)。

“核心”是 CPU 的处理元件,是与其他核心不同的硬件。如果 CPU 提供多个内核,则期望这些内核不仅彼此独立执行,而且不会争夺同一 CPU 上的大部分资源来执行它们。也就是说,同一个 CPU 提供的多个内核不会共享 CPU 的大部分硬件。

在此上下文中的“线程”(注意:大多数编程上下文中使用的术语“线程”是相关但不同的)是代码执行的路径,具有其自己独特的寄存器集。一个核心提供一个或多个线程。但是,如果 CPU 核心公开多个线程(通常只有 2 个),则预期线程 do 会相互竞争执行资源。

多线程核心(通常称为超线程)的想法是核心拥有大量执行资源。并且单个指令流并不总是能够饱和所有这些资源。因此,如果一个核心运行来自两个线程的指令,它可以更有效地使用其计算资源。

有时操作只是关闭一个线程。内存读取通常会停止线程以等待 RAM 中的数据。此时,核心上的第二个线程将获取核心,直到数据到达。


4
投票

这是一个常见的误解。有两种线程,软件线程和硬件线程。在编写多线程程序时,您正在谈论软件线程。当谈论 4 个(物理)核心和 8 个(逻辑)HT(超线程)核心时,您正在谈论硬件线程。活动软件线程的数量可能有 1000 个,由操作系统 (OS) 以时间切片的方式在有限数量的硬件线程上进行调度。


1
投票

当英特尔的 CPU 设计人员开始开发可以模拟 2 个核心的核心时(这种技巧有时比单核心更好地利用有限的缓存容量),他们决定使用“线程”一词来描述它们。他们可能会选择“虚拟核心”,但他们没有。然后他们在前面加上了“超级”这个词,嗯,我不知道为什么。超线程这个术语只是因为它与操作系统线程引起的混乱而令人烦恼,而操作系统线程是完全不同的事情。

其他处理器之前也这样做过。 Inmos Transputer 可以模拟许多核心,但通常被认为是“进程”,尽管其动机与缓存的有效利用无关(它的目的是支持我们在它们上使用的语言,Occam,这是一种通信顺序过程的实现,在 Go、Rust 等语言中突然再次流行起来。


0
投票

该视频解释了处理器、CPU 核心、CPU 线程、内核线程、用户线程的定义。

https://www.youtube.com/watch?v=yRRzwGX25_Q

综上所述,CPU是处理器类型之一。 “处理器”可以包括许多处理器。例如:Intel I9处理器包括2个处理器:CPU和GPU

CPU 控制 CPU 核心。 “CPU核心”实际上处理任务。 => 线程在“CPU 核心”上运行

“CPU核心”对应1个或多个“CPU线程”(硬件线程)。 SMT技术(Intel称之为“超线程”)支持1个“CPU核心”对应2个或更多“CPU线程”。然而,采用 SMT 技术,性能仅提高了约 30%。

操作系统中的“调度程序”管理在“CPU线程”上并发运行的“内核线程”

线程模型将“用户线程”映射到“内核线程”。

您应该观看视频以了解更多详细信息:https://www.youtube.com/watch?v=yRRzwGX25_Q

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