不管是執行緒還是程序,都是通過設定親和性(affinity)來達到目的。
與程序的情況相似,執行緒親和性的設定和獲取主要通過下面兩個函式來實現:
int pthread_setaffinity_np(pthread_t
thread
, size_t
cpusetsize,
const cpu_set_t *
cpuset);
int pthread_getaffinity_np(pthread_t
thread
, size_t
cpusetsize,
cpu_set_t *
cpuset);
從函式名以及引數名都很明了,唯一需要點解釋下的可能就是cpu_set_t這個結構體了。這個結構體的理解類似於select中的fd_set,可以理解為cpu集,也是通過約定好的巨集來進行清除、設定以及判斷:
//初始化,設為空
void cpu_zero (cpu_set_t *set);
//將某個cpu加入cpu集中
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,而未設定的位
則對應乙個不可排程的 cpu。換而言之,執行緒都被繫結了,只能在那些對應位被設定了的處理
器上執行。通常,掩碼中的所有位都被置位了,也就是可以在所有的cpu中排程。
使用函式pthread_attr_setaffinity_np
#include #include #include int getcpucount()
void *thread_fun()
return null;
}int main()
__cpu_zero(&cpu_info);
__cpu_set(1, &cpu_info);
if (0!=pthread_attr_setaffinity_np(&attr2, sizeof(cpu_set_t), &cpu_info))
if (0!=pthread_create(&t1, &attr1, thread_fun, null))
if (0!=pthread_create(&t2, &attr2, thread_fun, null))
pthread_join(t1, null);
pthread_join(t2, null);
}
使用函式pthread_setaffinity_np
#include #include #include int getcpucount()
void *thread_fun()
return null;
}int main()
if (0!=pthread_create(&t2, &attr2, thread_fun, null))
cpu_set_t cpu_info;
__cpu_zero(&cpu_info);
__cpu_set(0, &cpu_info);
if (0!=pthread_setaffinity_np(t1, sizeof(cpu_set_t), &cpu_info))
__cpu_zero(&cpu_info);
__cpu_set(1, &cpu_info);
if (0!=pthread_setaffinity_np(t2, sizeof(cpu_set_t), &cpu_info))
pthread_join(t1, null);
pthread_join(t2, null);
}
Linux中線程與CPU核的繫結
最近在對專案進行效能優化,由於在多核平台上,所以了解了些程序 執行緒繫結cpu核的問題,在這裡將所學記錄一下。不管是執行緒還是程序,都是通過設定親和性 affinity 來達到目的。對於程序的情況,一般是使用sched setaffinity這個函式來實現,網上講的也比較多,這裡主要講一下執行緒的情...
Linux中線程與CPU核的繫結
最近在對專案進行效能優化,由於在多核平台上,所以了解了些程序 執行緒繫結cpu核的問題,在這裡將所學記錄一下。不管是執行緒還是程序,都是通過設定親和性 affinity 來達到目的。對於程序的情況,一般是使用sched setaffinity這個函式來實現,網上講的也比較多,這裡主要講一下執行緒的情...
CPU的核與執行緒 4核8執行緒
邏輯cpu 單核cpu和多核cpu 總結 cat proc cpuinfo物理cpu就是計算機上實際配置的cpu個數。在linux上可以開啟cat proc cpuinfo來檢視,其中的physical id就是每個物理cpu的id,能找到幾個physical id就代表計算機實際有幾個cpu。在l...