线程 vs 核心

22

如果我有像这样的处理器,其说明#核心=4,#线程=4,且不支持超线程技术。

这是否意味着我可以同时运行4个程序/进程(因为一个核心只能运行一个线程)? 还是这意味着我可以同时运行4×4=16个程序/进程?

根据我的调查,如果没有超线程技术,每个核心只能运行1个线程(进程)。如果我错了,请指出。

4个回答

25

线程与进程不同。一个进程可以有多个线程。线程是一系列命令的顺序。逻辑核心可以执行一系列命令。操作系统将所有线程分配到所有可用的逻辑核心中,如果线程数大于核心数,则线程在快速队列中处理,核心会非常快速地切换。

看起来所有的线程都是同时运行的,但实际上操作系统将CPU时间分配给它们。

具有多个核心的好处是较少的并发线程将被放置在单个核心上,线程之间的切换较少=更快的速度。

超线程在一个物理核心上创建了2个逻辑核心,并使得线程之间的切换更快。


超线程并不能使线程切换更快,它允许两个线程在同一个物理核心上真正同时运行。前端交替周期,后端采用乱序调度以竞争性地共享执行单元。超线程处理器核心能够同时执行两个线程吗? / http://www.lighterra.com/papers/modernmicroprocessors/. 此外,请注意,“硬件”线程是指逻辑核心(执行上下文)的数量的标准术语,但与软件线程非常不同。 - Peter Cordes

18

基本上是正确的,显然大部分操作系统允许你同时执行更多的任务,而这远远超过了核心或线程数,这是通过交错指令的执行来实现的。

具备超线程技术的系统通常具有比物理核心多两倍的硬件线程。


你可能需要小心使用“同时”。对于用户来说,某些任务可能会看起来是同时发生的,但实际的硬件可能不会同时执行每个任务。我认为@mikaelbrandin发布的关于并行与并发信息很有用。 - user3731622
1
@user3731622,我在我的回答中通过解释CPU可以交错执行指令来表达了这个确切的观点。我该如何让它更清晰呢? - Marcelo Cantos
你的答案对于有经验的人来说可能很清晰明了。如果你使用一些“出现”的形式词汇,比如“同时”或“并行”,并描述一下当某些事情看起来是同时发生时实际上并不是同时发生的情况,那么你就可以让那些缺乏经验的人更容易理解了。 - user3731622
这确实回答了问题,但如果有人在搜索中遇到它,试图理解超线程(作为核心和线程之间的术语差异 - 请参见问题主题行),他们将很难理解您声称哪个陈述是正确的以及为什么; 然后,您只通过暗示4几乎不可能是线程与核心的比率来间接地解释您的答案。 - Jirka Hanika

8
术语“线程”通常用作操作系统概念的描述,它具有独立于其他线程执行的潜力。它是否这样做取决于它是否被卡在等待某些事件(磁盘或屏幕I/O,消息队列)上,或者是否有足够的物理CPU(超线程或非超线程)可以使其在其他非等待线程存在的情况下运行。
超线程是CPU供应商的术语,意味着单个核心可以在两个计算之间复用其注意力。将超线程内核视为具有两个实际速度略低于制造商实际能力的CPU。

4
基本上这取决于操作系统。一个线程是一个高级构造,它包含指令指针,并且操作系统将线程执行放在适当的逻辑处理器上。因此,使用4个核心可以基本上并行执行4条指令。而线程只包含有关要执行的指令以及指令在内存中的位置的信息。
应用程序通常在执行期间使用单个进程,操作系统在进程之间切换以给予所有进程“相等”的进程时间。当应用程序部署多个线程时,进程分配了多个执行槽,但在线程之间共享内存。
通常,您需要区分并发和并行执行。其中,并行执行是实际上物理执行多个逻辑处理器的指令,而并发执行是单个逻辑处理器频繁切换,从而呈现出并行执行的外观。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接