利用Linux系统提供的和调度器相关的接口让进程或线程对某个处理器进行绑定

设置进程与CPU的亲和性

taskset命令允许你查看或设置运行中的进程的CPU亲和性(即该进程可以在哪些CPU上运行)。

要将一个已经运行的进程(例如PID为1234的进程)绑定到CPU 0和CPU 1上,你可以使用:

taskset -cp 0,1 1234

如果你正在启动一个新进程并希望它绑定到特定的CPU,你可以使用taskset与&来在后台运行该进程:

taskset -c 0 ./your_program &

设置线程与CPU的亲和性

在编程中,你可以使用sched_setaffinity系统调用来设置线程的CPU亲和性。这通常在多线程应用程序中使用,以控制线程在哪个CPU上运行。

以下是一个简单的C语言示例,展示如何使用sched_setaffinity来将当前线程绑定到CPU 0:

点击查看代码
#define _GNU_SOURCE  
#include <stdio.h>  
#include <stdlib.h>  
#include <sched.h>  
#include <string.h>  
#include <unistd.h>  
  
int main(void) {  
    cpu_set_t cpuset;  
    CPU_ZERO(&cpuset);  
    CPU_SET(0, &cpuset);  
  
    if (sched_setaffinity(0, sizeof(cpu_set_t), &cpuset) == -1) {  
        perror("sched_setaffinity");  
        exit(EXIT_FAILURE);  
    }  
  
    // 在这里执行你的代码...  
  
    return 0;  
}
注意:在这个例子中,我们使用了0作为sched_setaffinity的第一个参数,它代表当前线程(主线程)。如果你想要设置其他线程的CPU亲和性,你需要使用pthread_setaffinity_np函数(如果你在使用POSIX线程库)。

编译并运行这个程序将把当前线程绑定到CPU 0上。你可以通过修改CPU_SET的参数来更改绑定的CPU。

posted @ 2024-06-01 23:09  铃是铃铛的铃  阅读(73)  评论(0)    收藏  举报