gpt4 book ai didi

c - 在多个 'fork' 之后,多个进程卡在同一个 CPU 上 (Linux/C)

转载 作者:IT王子 更新时间:2023-10-29 00:36:46 26 4
gpt4 key购买 nike

在多核机器上,如果同一个内核上满负荷运行多个进程,为什么 CPU 不自动将进程移动到新内核?

这是一个重现我所遇到问题的示例程序:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

void RunClient(int i) {
printf("Starting client %d\n", i);
while (true) {
}
}


int main(int argc, char** argv) {
for (int i = 0; i < 4; ++i) {
pid_t p_id = fork();
sleep(3);
if (p_id == -1) {
perror("fork");
} else if (p_id == 0) {
RunClient(i);
exit(0);
}
}

return 0;
}

这按预期工作(当我检查顶部时,我看到所有 4 个进程都以 100% 的速度运行)。

但是,如果我删除“sleep(3)”行,那么有时多个进程会被设置为同一个 CPU,因此不会满负荷运行(例如,一个进程可能处于 100%,而其他 3 个处于每个占 33%)。这是怎么回事,我该如何解决?

我知道我可以手动设置 CPU 亲和性,但这似乎是一个脆弱的解决方案?

最佳答案

这不是您的代码的问题,而是您的操作系统调度程序的问题。无论是否有 sleep(3)

,它都按我的预期工作(ubuntu 11.10)

但是 +1 表示发布 SSCCE

关于c - 在多个 'fork' 之后,多个进程卡在同一个 CPU 上 (Linux/C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10019096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com