2009-11-02 50 views
55

從我過去讀過的內容中,我們鼓勵您不要以編程方式更改Windows應用程序的優先級,如果這樣做,則不應將其更改爲「實時」。什麼是「實時」流程優先級設置?

與「高」和「高於正常」相比,「實時」進程優先級設置的作用是什麼?

回答

65

的實時優先級的線程永遠無法通過定時器中斷捷足先登,並運行在更高的優先級比系統中的任何其他線程。因爲這樣一個CPU綁定的實時優先級線程可以完全破壞一臺機器。

創建實時優先級線程需要特權(SeIncreaseBasePriorityPrivilege),因此它只能由管理用戶完成。

對於Vista及更高版本,確實需要以實時優先級運行的應用程序的一種選擇是使用Multimedia Class Scheduler Service(MMCSS)並讓它管理線程優先級。 MMCSS將阻止您的應用程序使用太多的CPU時間,因此您不必擔心機器出現故障。

+4

系統把一個隨機過程(比如視頻遊戲)放在實時優先級上會是危險的嗎?建議高優先級/該應用程序的性能下降會明顯嗎? – mrfred 2015-04-08 21:05:42

+9

@mrfred我不會說這很危險,只是如果它是一個大型程序,它會減慢整個系統。嘗試將Minecraft的優先權設置爲實時。相信我,這很有趣。您的鼠標速度變慢,按鍵需要5秒才能響應,並且explorer.exe變得無法響應! – 2015-07-08 01:36:30

+1

@mrfred我個人已經在一段時間內以高優先級和實時優先級運行skyrim,並且它使遊戲運行得更加平滑,只有偶爾的音頻製品(無論出於何種原因)。我從來沒有遇到過這樣做的任何問題......我認爲,如果出現可怕的錯誤,系統至少會過熱,但當然,我不知道可能會出錯。也許有多個內核可以解決IO設備資源匱乏的問題。 – Totem 2016-06-28 17:00:23

22

簡單地說,「實時」優先等級高於「高」優先等級。我認爲除此之外還有更多。哦,是的 - 你必須讓SeIncreaseBasePriorityPrivilege將線程放到實時課程中。

由於各種原因,Windows有時會提升線程的優先級,但不會將線程的優先級提高到另一個優先級。它也不會提高實時優先級中線程的優先級。所以高優先級的線程不會得到任何實時優先級的自動臨時提升。

Russinovich編寫的「Inside Windows的」在Windows上如何處理優先章是對學習有很大的資源是如何工作的:

注意,但絕對有具有真正的線沒有問題在正常的Windows系統上享有優先權 - 它們不一定適用於在專用機器上運行的特殊進程。我認爲多媒體驅動程序和/或進程可能需要具有實時優先級的線程。但是,這樣的線程不應該需要太多的CPU - 爲了正常的系統事件得到處理,應該阻塞大部分時間。

+6

是的,如果你有一個線程沒有太多的事情要做,但是需要*來體驗良好的響應時間,那麼實時線程是合適的。 – Artelius 2009-11-02 23:31:57

+0

我知道這是一箇舊帖子,但我發現那本書的章節真的很棒......讓我走了! https://www.google.ca/search?q=C04X1116607.pdf&ie=utf-8&oe=utf-8&gws_rd=cr&ei=cSTqVJzQNvHnsATun4CIDA#q=X1116607.pdf – MotherDawg 2015-02-22 19:15:14

12

這將是可用的最高優先級設置,通常只用於專門運行該特定程序的盒子。它實際上足夠高,它可能會導致鍵盤和鼠標線程的飢餓,從而導致它們不響應。

所以基本上,如果你要問,不使用它:)

+0

同意。瞭解它的含義非常重要(最重要的是該線程,最重要的是),但如果你發現自己問是否應該使用它,那麼你絕對不應該這麼做。 – 2009-11-02 22:27:26

+3

如果你不問如何使用它,你將如何學會使用它?我想你可以使用它,看看會發生什麼,然後你會學到,但是我覺得你很沮喪學習 – fifamaniac04 2015-06-09 17:36:43

2

實時是最高優先級可用於進程。因此,它與「高」不同的是,它比「高」更大一些,而「高於正常」則更大。

同樣,實時也是一個線程優先級。

進程優先級提升或降低進程中的所有有效線程優先級,因此被視爲「基本優先級」。

所以,一個進程有:

  1. 基地進程優先級
  2. 個別線程優先級,基本優先級的偏移量。

由於實時應該被保留用於絕對必須搶先其他正在運行的進程的應用程序,有一個特殊的安全權限,以防止隨意使用它。這由安全策略定義。

在NT6 +(Vista +)中,使用Vista多媒體類調度程序是在實時操作系統中實現而不是的實時操作的正確方法。它的工作原理大部分都不完美,因爲操作系統不是爲實時操作而設計的。

微軟認爲這個優先級非常危險,理所當然。除非是非常特殊的情況,否則任何應用程序都不應該使用它,甚至會嘗試將其用於臨時需求。

1

一旦Windows獲知程序使用高於正常的優先級,它似乎會限制進程的優先級。

將優先級從IDLE設置爲REALTIME不會改變CPU使用率。

我在我的多處理器AMD CPU上發現,如果我放棄其中一個CPU,就像LAST一樣,CPU使用率將MAX OUT並且最後一個CPU保持空閒狀態。我的四核AMD處理器速度提高到75%。

使用任務管理器 - >選擇進程 - >右鍵單擊進程 - >選擇 - >設置親和力 單擊除最後一個處理器以外的所有處理器。如果處理視頻會增加,CPU的使用率將增加到其餘處理器的MAX和幀數。

+1

只要CPU沒有爭用,更改進程優先級不影響CPU利用率就是了。但是,你認爲Windows根據CPU利用率限制最大進程優先級是錯誤的。相反,安全特權可防止設置「實時」以防止隨意使用。 – 2014-08-15 20:31:15

+0

(閱讀多年後) - 這裏的問題是線程不能分割。所以,你可能有8個內核,但只有2個CPU綁定(100%活動)線程。因此,你說「爲什麼我的其他6芯使用?」。或者,就你而言,「爲什麼不是我使用的最後一個核心?」。剩下的核心似乎什麼也不做。這就是你想要的。如果線程從核心轉換爲核心,則會降低性能。應用程序開發人員必須使用多線程,而不是一切都可以是多線程的。 – 2017-09-21 14:40:16

0

它在其他方面基本上更高/更高。鍵盤比實時過程更不重要。這意味着該過程將在鍵盤上被更快地考慮,如果它不能處理,那麼你的鍵盤會變慢。

0

與實時之前的所有其他答案一樣,該程序爲最高優先級。在程序被處理之前沒有任何處理。
在我的奔騰4機器上,我將minecraft設置爲實時,因爲它提高了遊戲性能,而且系統似乎完全穩定。所以實時並不像看起來那麼糟糕,就好像你有一個多核設置一個程序與特定內核或多個內核的親和力(只是不是所有內核,只是爲了讓其他所有程序能夠在實時情況下運行設置程序會掛起)並將優先級設置爲實時。