说我运行一个简单的单线程进程,如下所示:
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个图形时,我看到,使用4“内核”中的1个,cpu的使用量遍布核心:
相反,我期望的是1个核心的最大值,但这只有当我将进程的亲和力设置为单个核心时才会发生.
为什么工作量分散在单独的内核上?不会将多个内核的工作负载分散在一起,会导致缓存或其他性能损失?
这是为了防止一个核心过热的简单原因吗?还是有更深层次的原因?
编辑:我知道操作系统负责安排,但是我想知道为什么它会“麻烦”.从一个天真的观点来看,将(大部分*)单线程进程粘在一个核心上是比较简单的更有效的方式去吗?
*我主要说单线程,因为这里有多个,但只有2个人在做任何事情: