七、線程調度優先級和關聯性

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上

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