我指的是 Windows 10 作業系統,但我相信答案可能與作業系統無關。
在Windows上,即時優先級是最高優先級,例如用於處理鍵盤和滑鼠輸入。
據我在網路上讀到的:
將 CPU 密集型進程設定為即時意味著鍵盤和滑鼠將變得無響應,因為作業系統無法獲得足夠的 CPU 時間來處理這些輸入。
基本上,設定為即時優先權的進程將在不將 CPU 分配給任何其他進程(甚至是任務管理器)的情況下執行。如果出現問題,您將無法阻止它。
例如,請參閱此 Microsoft 貼文:當你將 100% CPU 程式設定為即時優先權時,你就會得到你想要的。
問題:
因此,所有這些讓我不敢在我的機器上測試這種優先級,這就是為什麼我問這個問題而不是自己嘗試。此外,理論答案似乎比嘗試玩具腳本更能證明未來。
如果我以即時優先權運行一個單執行緒進程,我知道它將不停地執行,直到完成。但是,如果我有第二個核心,由於第二個核心,我可以在該進程運行時使用我的電腦嗎?
如果是的話,這就有實際應用了。我可以在一個核心上運行一項計算任務,我需要盡快獲得其結果,同時仍然能夠將我的電腦與另一個核心一起使用。
答案1
如果我以即時優先權運行一個單執行緒進程,我知道它將不停地執行,直到完成。
這是一種誇張的說法。有幾件事使它不真實:
您在任務管理器中看到的「即時優先權」實際上是進程的執行緒可以存取的一系列優先權。一個「即時」進程的執行緒可能比另一個「即時」進程的執行緒具有更高的優先權。看我的回答這裡。然而,「即時」類別中的所有優先順序都高於所有其他類別中的任何優先順序。
大多數執行緒不會將所有程式碼都花在 CPU 上旋轉,因此無論其優先順序如何,它們都不會使用 100% 的 CPU。大多數線程確實有時會等待一些事情。通常它們正在等待 I/O 完成,或者等待硬頁面錯誤得到解決,或者等待某個其他線程指示它們不必再等待。 (另一個執行緒可能位於同一進程中,也可能位於不同的進程中。)
處理來自硬體設備的中斷(包括來自實時時鐘的中斷)的第一階段發生,無論任何基於線程的程式碼。這個東西沒有“優先權”,因為優先權是執行緒的屬性,但中斷不是由執行緒處理的。它們優先於基於執行緒的程式碼,無論後者的優先順序如何。你可以在 Windows 10 工作管理員的「詳細資料」標籤中以「系統中斷」的形式看到這些東西所使用的時間。
即時優先順序與其他優先順序的不同之處在於:
它的優先順序高於所有其他優先類別(當然)。
預設情況下,此類中的進程執行緒不會像其他類別中的進程執行緒那樣根據其最近的活動自動調整其優先權。 (執行緒優先權調整可以透過程式設計方式關閉和打開,但預設情況下,它對於非即時進程是打開的。)
但是,如果我有第二個核心,由於第二個核心,我可以在該進程運行時使用我的電腦嗎?
大概。事實上,即使您只有一個啟用了超線程的內核,情況也是如此。
即時優先權的正確使用不適用於 CPU 密集型進程。相反,我們對需要快速回應事件的任務使用高優先級。回應這些事件的基於 CPU 的密集工作應以低優先級完成,最好是低於「正常」優先級,以免妨礙互動式使用者。
答案2
基本上即時是一個非常高的優先級,除非必要,否則不應該這樣做。這是因為,如果您嘗試增強一個將佔用所有可用資源的進程,那麼即使是基本進程(如您提到的鍵盤和滑鼠)也會受到影響。這可能會使貪婪過程難以停止。
理想情況下,您應該使用某些東西來分配核心而不是優先順序。優先權影響整個CPU。例如,如果使用 VBox,設定更高的執行緒數對於多工處理和同時使用它比設定優先權更有效。
TL;DR 如果進行 CPU 密集型任務的多工處理,請為任務指派內核,並且不要將優先權覆寫為即時。如有必要,使用虛擬化來分段資源會有所幫助。