程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 給進程分配cpu核心

給進程分配cpu核心

編輯:關於C語言

新負責的程序采用生產者和消費者的模式,生產者的速度非常快,數據幾乎都在內存裡,處理起來很快。而消費者要頻繁的I/O。所以打算給生產者和消費者分配不一樣的核心。

生產者只需要一個核心就夠了,其余分配給消費者。

查了下這方面的資料,shell端有taskset命令可用。

taskset:

-p 正在運行的進程pid

-c 列表形式顯示指定cpu

-v version

-h help

 

用法:i.e.

# taskset -cp 1,2,3 4321

# taskset -c 1,2,3-5 /usr/bin/XXX

 

linux提供了兩個函數

  • sched_set_affinity() (用來修改位掩碼)
  • sched_get_affinity() (用來查看當前的位掩碼)

cpu_affinity 會被傳遞給子線程,因此應該適當地調用 sched_set_affinity

每個核心對應一位掩碼,相應位設為1

 

為每個線程設置 CPU 親和性(affinity)

  cpu_set_t mask;
   /* CPU_ZERO initializes all the bits in the mask to zero. */
        CPU_ZERO( &mask );
   /* CPU_SET sets only the bit corresponding to cpu. */
        CPU_SET( created_thread, &mask );
   /* sched_setaffinity returns 0 in success */
        if( sched_setaffinity( 0, sizeof(mask), &mask ) == -1 )
   {
      printf("WARNING: Could not set CPU Affinity, continuing...\n");
   }

獲取系統處理器數量

int NUM_PROCS = sysconf(_SC_NPROCESSORS_CONF);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved