假设我运行像下面这样的简单单线程进程:
public class SirCountALot {
public static void main(String[] args) {
int count = 0;
while (true) {
count++;
}
}
}
(这是Java,因为这是我熟悉的语言,但我认为这并不重要)
我有一台i7处理器(4个核心或8个逻辑核心),并且我正在运行Windows 7 64位系统,所以我启动了Sysinternals Process Explorer来查看CPU使用情况,正如预期的那样,我看到它正在使用大约20%的所有可用CPU。
但是,当我切换选项以显示每个CPU的1个图表时,我看到CPU使用情况分散在所有核心上,而不是使用4个“核心”中的1个,如下所示:
而我所期望的是一个核心被占满,但只有当我将进程的亲和力设置为单个核心时才会发生这种情况。
为什么工作负载分布在不同的核心上?将工作负载分配到多个核心会不会影响缓存或产生其他性能损失?
是为了防止一个核心过热吗?还是有其他更深层次的原因?
编辑:我知道操作系统负责调度,但我想知道它为什么“介意”。从天真的角度来看,将(大多数*)单线程进程粘附到1个核心上是更简单和更有效的方法,不是吗?
*我说大多数单线程是因为这里有多个线程,但只有其中的2个在做任何事情: