2

当我使用 gcc 运行这段代码时,

$ cat eatup.c
#include<stdio.h>
#include<stdlib.h>

int main() {
    int i = 0;
    while(1) {
        i++;
    }
}
$

CPU 图是这样的:

替代文字

我不确定为什么 CPU 核心使用率存在交叉。

  • 我在 40 标记左侧的上升点开始运行,然后最初 core2 的使用率上升到 100%,但过了一段时间后发生了切换,core1 的使用率上升到了 100%。

  • 任何后续运行都没有重现这种情况。我得到的只是一次上升 替代文字

这可能有点依赖于操作系统(在内核上调度进程),但有什么可以解释为什么会发生切换(如第一个屏幕截图所示)?有什么猜测吗?


事实证明,这些开关并不少见。这是启动后系统监视器的屏幕截图(Ubuntu 10.04)

全尺寸

替代文字

4

2 回答 2

3

可能发生了什么,操作系统还有两个需要运行的进程。第一个被赋予了第二个核心(因为你在第一个)。第二个导致你的程序失去它的 CPU 核心。然后第一个线程释放它的核心,你的程序被分配给它。

我不是 linux 专家,但通常可以告诉操作系统你有一个想要运行的首选内核。

于 2010-09-24T19:10:39.260 回答
0

这是依赖于操作系统的,但通常没有操作系统可以保证您的线程将始终在同一个核心上运行,除非您采取特定步骤来做到这一点。

虽然保持一个线程与同一个核心关联有一些明显的好处,但它不时被重新分配给另一个核心并没有什么不寻常的。您甚至可能会看到它每次运行(或几乎每次)时都会从一个核心扔到另一个核心。事实上,您在测试中看到的内容在这方面看起来相当不错。

于 2010-09-25T17:30:43.870 回答