執行緒綁核的簡單操作

2021-08-05 23:19:50 字數 1765 閱讀 9640

為了加快程式的執行速度和充分利用cpu資源,我們可以人為將不同執行緒繫結在不同的cup上,例如有兩個執行緒a,b,其中a已經在cpu0上執行,並且cpu0上還有其他的任務,那麼我們可以將執行緒b綁到cpu1上,這樣就可以減輕cpu0的負擔,從而充分利用多核cpu。說的明白點,原來是乙個cpu作兩件事,現在兩個cpu同時做兩個時,使效率更高。

話不多說,直接上**:

#define _gnu_source

#include //這兩個標頭檔案是一起的

#include #include #include #include #include void *myfun(void *arg)

cpu_zero(&get);

if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0)

if (cpu_isset(1, &get))

pthread_exit(null); //退出執行緒

}int main(int argc, char *argv)

cpu_zero(&mask); //初始化某個cpu集,設定為空

cpu_set(0, &mask); //將某個cpu加入到這個cpu集合裡,這裡是,也可以理解為,繫結cpu,這裡是cpu0

if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0)       //pthread_self():獲得執行緒自身id

cpu_zero(&get);

if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0)

if (cpu_isset(0, &get))

pthread_join(tid, null); //等待執行緒

return 0;

}

這個注釋應該很詳細了吧,我們編譯一下

gcc cpu.c -pthread

thread 139946778752832 is running in processor 0

thread 139946770462464 is running in processor 1

可以看到我們將兩個執行緒分別綁在了不同的cpu上面。

這裡總結一下用到的基本函式:

void cpu_zero (cpu_set_t *set);

//初始化,設為空

void cpu_set (int cpu, cpu_set_t *set);

//將某個cpu加入cpu集中

void cpu_clr (int cpu, cpu_set_t *set);

//將某個cpu從cpu集中移出

int cpu_isset (int cpu, const cpu_set_t *set);

//判斷某個cpu是否已在cpu集中設定了

int pthread_setaffinity_np(pthread_t thread,size_t cpusetsize,const cpu_set_t *cpuset);//設定cpu

int pthread_getaffinity_np(pthread_t thread,size_t cpusetsize, cpu_set_t *cpuset);//檢視cpu

如果大家英文水平良好建議用man手冊檢視,理解可能有所偏差,上面只是個人的理解,希望大家多給意見。

taskset的簡單用法 程序綁核

1.taskset taskset用來檢視和設定 cpu親和力 說白了就是檢視或者配置程序和cpu的繫結關係,讓某程序在指定的cpu核上執行,即是 綁核 2.taskset的用法 1 顯示程序執行的cpu taskset p pid 注意,此命令返回的是十六進製制的,轉換成二進位制後,每一位對應乙個...

taskset的簡單用法 程序綁核

所謂綁核,其實就是設定某個程序 執行緒與某個cpu核的親和力 affinity 設定以後,linux排程器就會讓這個程序 執行緒只在所繫結的核上面去執行。但並不是說該程序 執行緒就獨佔這個cpu的核,其他的程序 執行緒還是可以在這個核上面執行的。如果想要實現某個程序 執行緒獨佔某個核,就要使用cpu...

CPU的核與執行緒 4核8執行緒

邏輯cpu 單核cpu和多核cpu 總結 cat proc cpuinfo物理cpu就是計算機上實際配置的cpu個數。在linux上可以開啟cat proc cpuinfo來檢視,其中的physical id就是每個物理cpu的id,能找到幾個physical id就代表計算機實際有幾個cpu。在l...