Linux中線程與CPU核的繫結

2021-07-24 06:34:10 字數 2078 閱讀 5902

不管是執行緒還是程序,都是通過設定親和性(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...