在处理器内核上如何执行多个线程
我想知道具有更多线程数的多线程程序如何在处理器内核上执行。例如,我的程序有12个线程,我正在intel core-i5机器上运行它。它有四个CPU。每个核心会运行3个线程吗?我很困惑,因为我看到有三个线程运行在4核心机器上的程序。在处理器内核上如何执行多个线程
谢谢
每个内核都能够同时执行一个线程。所以如果有30个线程和4个内核,26个线程将等待上下文切换以执行。例如,线程1-4运行200毫秒,然后运行5-8秒,等待200毫秒等等。
好的!我知道了。所以基本上,操作系统调度程序或内核进入游戏呢? – user225008 2014-11-01 15:00:33
@ user225008是的确的 – Steve 2014-11-01 20:02:10
@Steve你有没有建议任何书来挖掘这个? – 2016-03-27 11:42:21
一个内核负责执行线程周期。您拥有的核心越多,可以同时运行的线程越多。每个内核一次只能执行一条指令,但速度如此之快,看起来好像您同时运行多个线程。 Intel Processors
支持Hyper Threading使单核能够支持多线程,因为operating system
看到每个物理核心的逻辑核心数量的两倍。例如,只有双核的Core i3实际上可以为每个内核提供两个线程,即总共四个线程可以同时运行。然而,即使Core i5 processors
是四核,因为它们不支持超线程(除了i5-661),它们可以同时服务的线程数量与它们的Core i3
对应的线程数量大致相等。
“每个内核一次只能执行一条指令”:Intel的Core微架构是[superscalar](http://en.wikipedia.org/wiki/Superscalar)。 (即使是英特尔的Atom微架构和ARM的Cortex-A8也是超标量的。) – 2014-11-01 11:59:48
@Paul:这是一般的核心声明。 – 2014-11-02 04:11:24
处理器内核能够一次执行一个线程。在四核中,4个线程同时执行。不是所有的用户空间线程都是同时执行的,内核线程也会运行以调度下一个线程或执行一些其他内核任务。
多进程运行的相同方式:分时。 – Barmar 2014-11-01 00:13:27
在大多数非嵌入式设备上,内核会设置一个中断以在一定时间后触发,然后加载其中一个线程并在用户空间中运行,然后当中断触发时,中断处理程序返回内核空间,然后内核有时会切换到另一个线程,再次设置中断。冲洗并重复。 – PeterT 2014-11-01 00:25:55
我有一个4/8核心的i7。它正在管理1215个线程。没问题,因为几乎没有任何人在跑步。 – 2014-11-01 00:39:58