為了加快程式的執行速度和充分利用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...