Windows等常用操作系統都不是實時性操作系統,所謂不是實時性,意思是你寫的程序放在這個操作系統上面運行,當程序需要睡眠2秒時,你的程序睡眠的可能不是2秒,而是2秒后能變為可調度狀態,但是如果系統程序多導致系統繁忙,則你的程序可能睡10秒,也可能永遠睡在那里。這就是非實時性操作系統。正常的狀態下,指明睡眠2秒,會睡眠2秒零幾百微秒。通過調節線程調度優先級,可以使本線程響應得比其他線程更快一些。以下總結了一些重要的概念:
1:Windows線程調度時,每個時間片為2ms,線程占用CPU時間片用完會被強制調出。調用Sleep(0)、等待事件等也會讓出剩余時間片被調出。至於下一次調度是什么時候沒有保證。
2:線程優先級可以在1-31之間調節,數值越大表示優先級越高。優先級高的線程會優先調度。
3:優先級低的線程飢餓數秒未得到調度,系統會自動臨時提升優先級到15,之后每調度一次減1,直到優先級減回原值。
4:調用SetPriorityClass能修改進程優先級,可調節為下表中的幾種:
5:調用SetThreadPriority能修改線程的優先級,可調節為下表中的幾種:
6:進程優先級和線程優先級組合起來,可以算出線程的基礎優先級值。基礎優先級低於15的線程在飢餓時會被系統臨時調節到15。
7:優先級高於15的線程被命名為實時優先級,因為優先級低於它的線程就算餓死也不可能爭過它。
8:把線程優先級調節到11時,很少有超過1毫秒的延遲。但是這是一個相對值,在不同的機器、不同的繁忙程度結果是不一樣的。
9:調節線程優先級唯一改變的就是 線程從 可調度狀態變為運行狀態 這個變化所用的時間縮短。
10:優先級高的線程應該大多數時候處於不可調度狀態,否則對其他進程的實時性會有較大影響。