![如何確保一個進程正在給定的處理器/核心上運行?](https://rvso.com/image/1313333/%E5%A6%82%E4%BD%95%E7%A2%BA%E4%BF%9D%E4%B8%80%E5%80%8B%E9%80%B2%E7%A8%8B%E6%AD%A3%E5%9C%A8%E7%B5%A6%E5%AE%9A%E7%9A%84%E8%99%95%E7%90%86%E5%99%A8%2F%E6%A0%B8%E5%BF%83%E4%B8%8A%E9%81%8B%E8%A1%8C%EF%BC%9F.png)
我想這樣做,這樣我就可以準確地加速我的流程,並且能夠產生控制的錯覺。
也許我想為特殊程式保留一個處理器。也許我想編寫自己的流程優化器。誰知道。在我的腦海裡,有無限的可能性。
這在任何作業系統中都可能嗎?如果不是為什麼不呢?如果我們可以劃分內存,為什麼我們不能對處理器進行這樣的控制?
謝謝。
答案1
在 Linux 上,中央處理器組應該為此工作。
答案2
這在理論上是可能的。完成類似任務的最簡單方法是使用虛擬化平台,該平台允許您將特定的 CPU/核心分配給特定的虛擬機器。然後,您可以在給定的虛擬機器上運行您想要的進程(當然,作業系統開銷最低)。
答案3
最簡單的方法是設定給定進程的處理器關聯性,或告訴作業系統允許該進程在哪些邏輯 CPU(核心)上運行。如果右鍵單擊 Windows 工作管理員中的進程並選擇Set Affinity...
,您將發現一個如下所示的視窗:
在基於 Linux 的系統中,您可以taskset
使用實用程式做同樣的事情或透過在進程條目中設定適當的 CPU 遮罩標誌/proc
。
遺憾的是,沒有簡單的方法可以從某個處理器中刪除所有進程,或者在進程啟動時自動為其設置特定的掩碼 - 您需要一個腳本來監視系統上的新進程並設置適當的關聯性你想要的。