
進程是否會在不同核心之間切換以提高效能?如果進程確實在核心之間跳轉,那麼哪些元件是跨核心共享的? L1-L3 快取、暫存器還是記憶體?
答案1
讓我們想像一下一個繁忙的 2 核心單 CPU 系統,負載接近 100%。
PID 為1234 的程序只有一個執行緒(例如,執行單執行緒音訊壓縮的控制台應用程式)。
對於這種進程,系統會盡力在同一個核心上運行線程,以盡量減少快取故障。然而,如果系統真的很忙,類似的其他進程也可能會嘗試在相同的核心上運行。在這種情況下,原則上,您的單執行緒進程可能會先在核心 #1 上運行,然後在核心 #2 上運行,依此類推。
答案2
Process會在不同核心之間切換以提高效能嗎?
這取決於該進程是否為多執行緒進程。進程本身基本上只是線程的一個“容器”,它至少需要有一個才能運行。每個執行緒可以使用一個 CPU 核心,因此如果您的進程有 2 個執行緒(一個 GUI 執行緒和一個工作執行緒),它將在 2 個 CPU 核心上執行。
「進程將在不同核心之間切換」的問題並不完全正確,因為這種切換是由作業系統(OS)而不是進程本身來安排的!
答案3
CPU之間的進程切換會損害效能,因為切換意味著將進程資訊和暫存器儲存在記憶體中,然後將其載入到另一個CPU上。
這些儲存和載入命令是 CPU 上最慢的命令之一,儘管如果不經常執行它們就不會被注意到。
此程序與進程終止其時間片並被作業系統掛起,然後以新的時間片重新啟動時完全相同。