Linux有许多线程和进程在CPU内核之间执行(比如2个)。我希望我的单线程C / C ++应用程序成为CPU0上唯一的线程。如何“移动”所有其他线程以使用CPU1?
我知道我可以使用Linux CPU调度功能来设置线程的亲和性:
int sched_setaffinity(pid_t pid,size_t cpusetsize,cpu_set_t *mask);
但是如何将所有其他线程推送到CPU1?有一个相对简单的方法吗?
我是否必须获取所有pid的列表,迭代将它们全部设置为CPU1然后将我的应用程序线程设置为CPU0?
答案 0 :(得分:0)
你这样做的想法似乎是正确的。但是,我想提一些关于这一点的问题,应该仔细理解。
1.sched_setaffinity()是对内核/调度程序(而不是命令)的一种请求,用于选择允许哪个进程/线程执行的CPU。流程的实际调度确实取决于许多其他复杂因素。
2.你提到你可以遍历所有的PID。这不是一个好主意,因为通过这样做,您可能会尝试更改内核服务和init进程的调度。在所有情况下,程序都没有足够的权限为这些进程执行此操作,但我们仍然不应该尝试更改这些进程的属性,因为我们不知道其影响。