線程優先級

優先級是線程調度的重要依據。優先級高的線程,永遠先獲得CPU的青睞。當然啦,操作系統會視情況調整各個線程的優先級。例如前臺線程的優先級應該調高一些,後臺線程的優先級應該調低一些。

   

線程的優先級範圍從0(最低)到31(最高)。當你產生線程時,並不是直接以數值指定其優先級,而是採用兩個步驟。第一個步驟是指定“優先級等級(Priority Class)”給進程,第二步驟是指定“相對優先級”給該進程所擁有的線程。表1是對優先級等級的描述,其中的代碼在CreateProcessdwCreationFlags參數中指定。如果你不指定,系統默認給的是NORMAL_PRIORITY_CLASS,除非父進程是IDLE_PRIORITY_CLASS(那麼子進程也會是IDLE_PRIORITY_CLASS)。

 

 

  

   

優 先 級 值

idle

IDLE_PRIORITY_CLASS

4

normal

NORMAL_PRIORITY_CLASS

9(前臺)或7(後臺)

high

HIGH_PRIORITY_CLASS

13

realtime

REALTIME_PRIORITY_CLASS

24

1  Win32 線程的優先級等級劃分

 

 

 

    ■ “idle”等級只有在CPU時間將被浪費掉時(也就是idle time)才執行。該等級最適合於系統監視軟件,或屏幕保護軟件。

    ■ “normal”是默認等級。系統可以動態改變優先級,但只限於“normal”等級。當進行變成前臺,線程優先級提升爲9,當進程變成後臺時,優先級降低爲7

    ■ “high”等級是爲了滿足立即反應的需要,例如使用者按下Ctrl + Esc時立刻把工作管理器(task manager)帶出場。

    ■ “realtime”等級幾乎不會被一般的應用程序使用。就連繫統中控制鼠標、鍵盤、驅動器狀態重新掃描、Ctrl + Alt + Del等的線程都比“realtime”的優先級還低。這種等使用在“如果不在某個時間範圍內被執行的話,數據就要遺失”的情況。這個等級一定得在正確評估之下使用,如果你把這樣的等級指定給一般的(並不會常常阻塞的)線程,多任務環境恐怕會癱瘓,因爲這個線程有如此高的優先級,其它線程再沒有機會被執行。

 

    上述四種等級,每一個等級又映射到某一範圍的優先級值,IDLE_最低,NORMAL_次之,HIGH_又次之,REALTIME_最高。在每一個等級之中,你可以使用SetThreadPriority設定精確的優先級,並且可以稍高或稍低於該等級的正常值(範圍是兩個點數)。你可以把SetThreadPriority想象成一種微調操作。

 

 

SetThreadPriority 的 參 數

微 調 幅 度

THREAD_PRIORITY_LOWEST

- 2

THREAD_PRIORITY_BELOW_NORMAL

- 1

THREAD_PRIORITY_NORMAL

不變

THREAD_PRIORITY_ABOVE_NORMAL

+ 1

THREAD_PRIORITY_HIGHEST

+ 2

 

 

    除了以上五種微調,另外還可以指定兩種微調常數:

 

 

SetThreadPriority參數

面對任何等級的調整結果

面對“realtime”等級的調整結果

THREAD_PRIORITY_IDLE

1

16

THREAD_PRIORITY_TIME_CRITICAL

15

31

 

 

    這些情況可以以表2作爲總結。

 

 

優先級等級

idle

lowest

below normal

normal

above normal

highest

time critical

idle

1

2

3

4

5

6

15

normal(後臺)

1

5

6

7

8

9

15

normal(前臺)

1

7

8

9

10

11

15

high

1

11

12

13

14

15

15

realtime

16

22

23

24

25

26

31

2  Win32 線程優先級

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章