1. 線程切換 --> 上下文切換
2. 搶佔式調度,很多線程無法調度。因爲他們都在等待某種事情發生 p166
3. 掛起和恢復 suspendThread 掛起 ResumeThread 恢復
對掛起進行計數,例如一個線程被掛起三次,則需要回復三次才能被調度。
在實際開發中,使用suspendThread要小心,若掛起一個正在堆中分配內存的線程,會導致其它線程不能訪問堆。
確切知道目標線程在做什麼,且採取措施避免掛起造成死鎖等問題,纔可掛起
一個線程可以掛起自身,但無法恢復自身
4. 進程掛起和恢復
系統從來不會給進程調度cpu時間,故不存在進程掛起和恢復概念。在這裏特質,掛起一個進程中的所有線程 p168
快照 id 引用計數加1
5. 睡眠, 線程告訴系統, 在一段時間內不需要調度了。 sleep。 睡眠的市場並不準。Sleep(100)。可能睡眠100ms,也可能睡眠幾分鐘,根據系統運行當前情況而定。sleep(0)表示放棄時間片的剩餘時間。
6. 在windows定義的所有數據結構中,context結構是唯一一個特定cpu的。
7. 線程優先級0-31 31最高。 可搶佔式(高優先級線程會暫停低優先級線程,而使自己得到運行時間片)
8. 進程優先級 + 線程優先級 = 線程優先級值
動態優先級: 當線程接收消息等時, 系統可能臨時提高其優先級,以及可能對飢餓線程動態提升。
9. 調度io請求優先級
如果一個優先級線程獲得cpu時間,可以輕易將大量io請求入列。因爲io請求都需要時間處理。低優先級線程會掛起高優先級線程(io),使它們無法完成任務。(磁盤掃描,殺毒等時候系統響應很慢就是這個原因)
故而,windows vista 開始,線程可以在進程io請求時設置優先級。系統不允許線程改變另一個線程的優先級。
p196 應儘量減少normal 和後臺優先級線程之間使用共享同步對象,以避免normal優先級線程因爲後臺優先級線程擁有鎖而被阻塞,導致線程逆轉。
10. 關聯性
線程運行在那些cpu上