如何禁止在任何應用程序的所有線程的特定CPU內核上運行,除非我指定的線程(在Win/nix中)?我們可以使用POSIX中的OS-API函數:sched_setaffinity()和WINAPI中的SetProcessAffinityMask(),SetThreadAffinityMask()函數來將線程或進程綁定到特定的CPU核心。如何禁止在任何應用程序的所有線程的特定CPU內核上運行,除非我指定的線程?
但是如果我們想要,那些在這些原子核上的許多第三方應用程序的任何其他線程都不會啓動,這些線程當前正在操作系統上運行,怎麼辦?
UPDATE:需要一個實時系統 - 必需由我指定的線程永遠不會發生上下文切換或臨時暫停。
可能的解決方案:
- 使用實時操作系統,如QNX
- 除了綁定到處理器核心,實時優先級設置
- 使用Xen的虛擬化的(POSIX)m鎖()或(WINAPI)VirtualLock():跨操作系統
頁面錯誤很容易利用釘扎存儲器解決處理器核的分佈
只是不要嘗試。繼續,我會咬 - 你真的想要解決什麼XY問題? –
我很確定在Windows或Linux中沒有這種機制 - 一個不做任何事情的CPU對於調度其他線程是公平的。如果你想分離一個特定的工作負載,使用虛擬機設置可能是一個更好的主意,並使用它的能力來劃分整個虛擬機的CPU和內存使用情況。 –
@Martin James需要一個實時系統 - 必須由我指定的線程永遠不會發生上下文切換,或暫時中止。 – Alex