线程是什么意思?

MOO*_*OON 0 cpu multithreading

线程是什么意思?

我的Intel CPU有6个内核和12个线程.我知道每个核心可以与其他5个核心并行进行计算.因此,如果我在每6个核心上运行一个程序,我会加速6倍.但我无法理解线程.如果我在我的6个内核的12个线程上运行我的程序,我会加速12倍吗?

Lee*_*eor 5

线程是一个"逻辑核心",它有一整套寄存器,使用自己的虚拟地址空间,并且可以执行核心可以执行的任何操作,因此从这个意义上说 - 您有12个核心.

但是,一个线程与其同一核心上的对应线程共享其大部分执行资源.由于现代核心可以同时处理多个指令,因此拥有两个(或更多)线程允许您将指令从2个软件线程"抛出"到一个大的"池"中,并在它们准备就绪时执行它们.如果你有一个单独的线程占用你的核心利用率的100%,那么你将从中获得很多,但如果其中一个线程留下一些空槽,因为它有分支错误预测,数据依赖性,长内存延迟,或者导致效率低下的任何其他原因 - 共享核心的另一个线程可以使用这些插槽,为您提供一个很好的提升(因为替代方案是等到第一个线程完成其时隙并进行昂贵的上下文切换).

一般来说,您可以通过以下方式考虑这一点 - 在2个内核上运行2个软件线程可以提供最佳性能,在单个内核上运行它们同时进行多线程会稍慢,特别是在您执行时受限的情况下(但如果你因为内存延迟而受限制则不那么重要).但是,如果您没有此功能,则在单个核心上运行相同的2个工作负载将需要您一个接一个地运行它们(在时隙中),这可能会慢得多.

编辑:请注意,有不同的方法来实现这个概念,请参阅例如 - 英特尔和AMD多线程之间的差异