线程 运行 在 CPU 上还是在核心上?
Are threads run on CPU or core?
我是多线程的初学者。到目前为止有这么多新概念。有人可以在 core 和 CPU 之间做一些解释吗?我试过谷歌搜索,但没有太大帮助。
最重要的是,单线程 运行 是单核还是单线程 CPU?
还有,我有i7。它说我有 4 个内核,但有 8 个线程。核心和线程不是1-1的关系吗?它是如何翻倍的?
提前致谢!
A CPU,在此上下文中,是一个单独的物理芯片,可以与计算机上的其他 CPU 分开安装(应该有多个 CPU s).
“核心”是 CPU 的处理元素,是与其他核心截然不同的硬件。如果 CPU 提供多个内核,则期望内核不仅彼此独立执行,而且它们不会争用同一 CPU 上的大多数资源来执行它们。也就是说,同一个 CPU 提供的多个内核并没有共享 CPU 的大部分硬件。
在此上下文中的“线程”(注意:大多数编程上下文中使用的术语“线程”是相关但不同的)是代码执行的路径,具有自己独特的一组寄存器。一个核心提供一个或多个线程。但是,如果 CPU 内核公开多个线程(通常只有 2 个),则预期线程 会 相互竞争执行资源。
多线程内核(通常称为超线程)的想法是内核拥有大量执行资源。并且单个指令流不可能总是使所有这些资源饱和。因此,如果一个核心运行来自两个线程的指令,它可以更有效地使用其计算资源。
有时操作只是关闭一个线程。内存提取通常可以停止其轨道中的线程以等待来自 RAM 的数据。在那些时候,核心上的第二个线程将获取核心直到数据到达。
当 Intel 的 CPU 设计师开始开发可以模拟 2 个内核的内核时(这种技巧有时比单个内核更好地利用有限的缓存容量),他们决定使用“线程”这个词来描述他们。他们也可能选择了“虚拟核心”,但没有。然后他们在前面加上了“超级”这个词,好吧,我不知道为什么。 Hyperthread 一词令人讨厌,因为它与 OS 线程混淆,这完全是另一回事。
其他处理器以前也这样做过。 Inmos Transputer 可以模拟许多内核,但通常被认为是“进程”,尽管其动机与有效利用缓存无关(它旨在支持我们在它们上使用的语言,Occam,这是一个Communicating Sequential Processes 的实现,这在 Go、Rust 等语言中突然再次流行起来。
这是一个普遍的误解。有两种线程,软件和硬件。在编写多线程程序时,您正在谈论软件线程。在谈论 4 个(物理)内核和 8 个(逻辑)HT(超线程)内核时,您是在谈论硬件线程。活动软件线程的数量可能有 1000 个,由操作系统 (OS) 在有限数量的硬件线程上以时间片方式进行调度。
我是多线程的初学者。到目前为止有这么多新概念。有人可以在 core 和 CPU 之间做一些解释吗?我试过谷歌搜索,但没有太大帮助。
最重要的是,单线程 运行 是单核还是单线程 CPU?
还有,我有i7。它说我有 4 个内核,但有 8 个线程。核心和线程不是1-1的关系吗?它是如何翻倍的?
提前致谢!
A CPU,在此上下文中,是一个单独的物理芯片,可以与计算机上的其他 CPU 分开安装(应该有多个 CPU s).
“核心”是 CPU 的处理元素,是与其他核心截然不同的硬件。如果 CPU 提供多个内核,则期望内核不仅彼此独立执行,而且它们不会争用同一 CPU 上的大多数资源来执行它们。也就是说,同一个 CPU 提供的多个内核并没有共享 CPU 的大部分硬件。
在此上下文中的“线程”(注意:大多数编程上下文中使用的术语“线程”是相关但不同的)是代码执行的路径,具有自己独特的一组寄存器。一个核心提供一个或多个线程。但是,如果 CPU 内核公开多个线程(通常只有 2 个),则预期线程 会 相互竞争执行资源。
多线程内核(通常称为超线程)的想法是内核拥有大量执行资源。并且单个指令流不可能总是使所有这些资源饱和。因此,如果一个核心运行来自两个线程的指令,它可以更有效地使用其计算资源。
有时操作只是关闭一个线程。内存提取通常可以停止其轨道中的线程以等待来自 RAM 的数据。在那些时候,核心上的第二个线程将获取核心直到数据到达。
当 Intel 的 CPU 设计师开始开发可以模拟 2 个内核的内核时(这种技巧有时比单个内核更好地利用有限的缓存容量),他们决定使用“线程”这个词来描述他们。他们也可能选择了“虚拟核心”,但没有。然后他们在前面加上了“超级”这个词,好吧,我不知道为什么。 Hyperthread 一词令人讨厌,因为它与 OS 线程混淆,这完全是另一回事。
其他处理器以前也这样做过。 Inmos Transputer 可以模拟许多内核,但通常被认为是“进程”,尽管其动机与有效利用缓存无关(它旨在支持我们在它们上使用的语言,Occam,这是一个Communicating Sequential Processes 的实现,这在 Go、Rust 等语言中突然再次流行起来。
这是一个普遍的误解。有两种线程,软件和硬件。在编写多线程程序时,您正在谈论软件线程。在谈论 4 个(物理)内核和 8 个(逻辑)HT(超线程)内核时,您是在谈论硬件线程。活动软件线程的数量可能有 1000 个,由操作系统 (OS) 在有限数量的硬件线程上以时间片方式进行调度。