c - 为什么我运行这个 C 代码时 CPU 核心使用率有一个开关?

标签 c gcc scheduling cpu-usage ubuntu-10.04

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

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

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

CPU 图是这样的:

alt text

我不知道为什么 CPU 核心使用率会出现交叉。
  • 我在 40 标记左侧的上升处开始运行,然后最初 core2 使用率上升到 100%,但过了一段时间有一个开关,core1 使用率上升到 100%。
  • 任何后续运行都没有重现这种情况。我得到的只是一次上升
    alt text

  • This might be a bit OS dependent (scheduling processes on the cores), but is there anything that could explain why the switch happened (as shown in the first screenshot)? Any guesses?



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

    Full Size

    alt text

    最佳答案

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

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

    关于c - 为什么我运行这个 C 代码时 CPU 核心使用率有一个开关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3790115/

    相关文章:

    我们可以使用 gcov 在 C/C++ 源文件中找到可执行代码行吗

    android - 在android中重新安排计时器

    c - pthread调度

    c - 为什么 do (while number > 10) 中的 int 数字会导致无限循环?

    c++ - 是否可以在 c/c++ 中将 8 个字符(每个 1 字节)存储在 double 类型(8 字节)的变量中?

    c - 消息队列给了我一个无效的参数

    c++ - 我如何在 Mac 上构建 gcc?

    c - 没有成员编译错误

    windows - 在哪里可以找到有关 Windows 10 进程调度的详细信息?

    c - 获取内核对象窗口列表