Background-Process
多核機器上的後台任務?
假設我有一個執行 linux 的雙核 cpu。
如果我在後台啟動兩個單執行緒程序(nodejs),它們是如何調度的?
我可以假設作業系統會盡其所能,嘗試讓每個程序在不同的核心上執行,還是我做了一些不同的事情?
是的,它將跨核心安排工作,而無需您進行任何額外配置。
來自ibm.com 上關於 Linux SMP 的這篇優秀文章(emahsis mine):
在 Linux 2.0 的早期,SMP 支持由一個“大鎖”組成,它可以對整個系統的訪問進行序列化。支持 SMP 的進展慢慢地遷移進來,但直到 2.6 核心才最終顯露出 SMP 的威力。
2.6 核心引入了新的 O(1) 調度程序,其中包括對 SMP 系統的更好支持。關鍵是能夠在可用 CPU 之間進行負載平衡工作,同時保持一定的記憶體效率相關性。為了提高記憶體效率,請回想圖 4,當一個任務與單個 CPU 相關聯時,將其移動到另一個 CPU 需要為該任務刷新記憶體。這會增加任務的記憶體訪問延遲,直到其數據位於新 CPU 的記憶體中。
2.6 核心為每個處理器維護一對執行隊列(過期和活動執行隊列)。每個執行隊列支持 140 個優先級,前 100 個用於實時任務,後 40 個用於使用者任務。任務被賦予執行時間片,當它們使用它們分配的時間片時,它們會從活動執行隊列移動到過期執行隊列。這為所有任務提供了對 CPU 的公平訪問(並且僅在每個 CPU 的基礎上鎖定)。
**通過每個 CPU 的任務隊列,可以根據系統中所有 CPU 的測量負載平衡工作。**每隔 200 毫秒,調度程序執行負載平衡以重新分配任務負載,以保持處理器複合體之間的平衡。有關 Linux 2.6 調度程序的更多資訊,請參閱參考資料部分。