線程與CPU核綁定

線程與CPU核綁定

不管是線程還是進(jìn)程,都是通過設(shè)置親和性(affinity)來達(dá)到目的。對于進(jìn)程的情況,一般是使用sched_setaffinity()來實(shí)現(xiàn)。
與進(jìn)程的情況相似,線程親和性的設(shè)置和獲取主要通過下面兩個(gè)函數(shù)來實(shí)現(xiàn):

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這個(gè)結(jié)構(gòu)體類似于select中的fd_set,可以理解為cpu集,也是通過約定好的宏來進(jìn)行清除、設(shè)置以及判斷:

void CPU_ZERO (cpu_set_t *set); //初始化,設(shè)為空
void CPU_SET (int cpu, cpu_set_t *set); //將某個(gè)cpu加入cpu集中
void CPU_CLR (int cpu, cpu_set_t *set); //將某個(gè)cpu從cpu集中移出
int CPU_ISSET (int cpu, const cpu_set_t *set); //判斷某個(gè)cpu是否已在cpu集中設(shè)置了

cpu集可以認(rèn)為是一個(gè)掩碼,每個(gè)設(shè)置的位都對應(yīng)一個(gè)可以合法調(diào)度的 cpu,而未設(shè)置的位則對應(yīng)一個(gè)不可調(diào)度的 CPU。換而言之,線程都被綁定了,只能在那些對應(yīng)位被設(shè)置了的處理器上運(yùn)行。通常,掩碼中的所有位都被置位了,也就是可以在所有的cpu中調(diào)度。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概念 什么是CPU Affinity?Affinity是進(jìn)程的一個(gè)屬性,這個(gè)屬性指明了進(jìn)程調(diào)度器能夠把這個(gè)進(jìn)程調(diào)度...
    梅_梅閱讀 1,426評論 3 4
  • 又來到了一個(gè)老生常談的問題,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問題開始,來談?wù)劜?..
    tangsl閱讀 4,317評論 0 23
  • Linux 內(nèi)核SMP負(fù)載均衡淺析 需求在《linux進(jìn)程調(diào)度淺析》一文中提到,在SMP(對稱多處理器)環(huán)境下,每...
    meng_philip123閱讀 1,991評論 0 3
  • Linux 進(jìn)程管理與程序開發(fā) 進(jìn)程是Linux事務(wù)管理的基本單元,所有的進(jìn)程均擁有自己獨(dú)立的處理環(huán)境和系統(tǒng)資源,...
    JamesPeng閱讀 2,576評論 1 14
  • 又做了一些體驗(yàn)感不太好的夢, 做到最后還濕了眼眶, 想起一件小事, 原來有一個(gè)關(guān)系還不錯(cuò)的,朋友。 說是關(guān)系不錯(cuò),...
    土豆三三閱讀 583評論 0 0

友情鏈接更多精彩內(nèi)容