我正在考慮開發一個應用程序,它將在六核心機器上運行六個異步任務,每個核心都有一個任務。有沒有辦法將進程鎖定到CPU?
但是是否有可能將任務鎖定到自己的核心?
這個想法是讓他們主要靠自己運行,但有時需要通過共享內存區域進行通信。但是,我希望這些任務儘可能不受干擾地運行。
我正在考慮開發一個應用程序,它將在六核心機器上運行六個異步任務,每個核心都有一個任務。有沒有辦法將進程鎖定到CPU?
但是是否有可能將任務鎖定到自己的核心?
這個想法是讓他們主要靠自己運行,但有時需要通過共享內存區域進行通信。但是,我希望這些任務儘可能不受干擾地運行。
你正在尋找的概念被稱爲「線程親和力」。它是如何實現的以及要求它的接口是特定於操作系統的。
在Linux下,嘗試sched_setaffinity()。 glibc也可能提供pthread_attr_setaffinity_np()。
沒有鎖,但它是可能的cpu affinity的過程
taskset -c cpunum yourprocess
你想要做什麼關聯。 可以改爲提供PID,這樣就可以將單個線程設置爲cpu。如果你想改變你自己的程序的CPU親和力,使用sched_setaffinity()
。
難道你真的相信你會做的更好比決定每個任務應運行哪個cpu的調度程序更重要? :-) – 2011-03-29 22:52:28
@R ..,不知道,但我有一個很好的預感。原因是有6件事情要做,而且它們應該儘可能不中斷地異步運行。 – 2011-03-30 05:54:00