線程與CPU核綁定

線程與CPU核綁定

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

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); //初始化,設為空
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,而未設置的位則對應一個不可調度的 CPU。換而言之,線程都被綁定了,只能在那些對應位被設置了的處理器上運行。通常,掩碼中的所有位都被置位了,也就是可以在所有的cpu中調度。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 概念 什么是CPU Affinity?Affinity是進程的一個屬性,這個屬性指明了進程調度器能夠把這個進程調度...
    梅_梅閱讀 1,393評論 3 4
  • 又來到了一個老生常談的問題,應用層軟件開發的程序員要不要了解和深入學習操作系統呢? 今天就這個問題開始,來談談操...
    tangsl閱讀 4,172評論 0 23
  • Linux 內核SMP負載均衡淺析 需求在《linux進程調度淺析》一文中提到,在SMP(對稱多處理器)環境下,每...
    meng_philip123閱讀 1,873評論 0 3
  • Linux 進程管理與程序開發 進程是Linux事務管理的基本單元,所有的進程均擁有自己獨立的處理環境和系統資源,...
    JamesPeng閱讀 2,510評論 1 14
  • 又做了一些體驗感不太好的夢, 做到最后還濕了眼眶, 想起一件小事, 原來有一個關系還不錯的,朋友。 說是關系不錯,...
    土豆三三閱讀 557評論 0 0