【Windows核心編程筆記】第七章 線程的調度、優先級和親緣性

知識點概述:

Windows不是實時操作系統,而是搶佔式多線程操作系統

 

創建線程的內核對象之後,線程的暫停計數爲1,此時不能被CPU調度,因爲線程要初始化

初始化完成之後,會檢查是否有掛起標誌,有的話線程就暫停狀態,沒有則遞減暫停計數爲0,此時如果線程沒有等待其他事情,就處於可調度的狀態

 

除了CREATE_SUSPENDED標誌外,還可以使用SuspendThread 暫停線程,並且可以暫停多次,最多暫停127次,MAXIMUM_SUSPEND_COUNT標誌。遞增暫停計數。此時如果想要恢復線程可調用狀態,多次調用ResumThread遞減暫停計數爲0即可

 

進程不存在暫停或恢復,因爲不會分配CPU時間

可以通過遍歷進程的線程組來開關所有線程,但是存在隱患:因爲此時仍然可以可以創建或撤銷線程,所以之後的掛機或恢復操作就會有問題。比如獲取到所有線程後還沒有掛起時,此時創建了新的線程,此時將遺漏新建的線程,同理,獲取後撤銷了一個線程,會恢復不存在的線程等

 

由於線程可能被中斷,所以計算運行時間時GetTickCount()就不準確

GetThreadTimes:線程執行操作系統代碼和應用程序代碼的CPU時間(100ms單位)

GetProcessTimes:所有線程執行內核代碼和用戶代碼的時間總和(100ms單位)

 

高精度運行時間計算函數

QueryPerformanceFrequency

QueryPerformanceCounter

 

SetPriorityClass:改變進程的優先級類

SetThreadPriority:設置線程的相對優先級

 

激活或停用進程或線程的優先級提高功能

SetProcessPriorityBoost

SetThreadPriorityBoost

 

SetProcessAffinityMask:限制CPU子集上運行的單個進程中的線程數量

SetThreadAffinityMask:設置線程的親緣性(線程能在哪個CPU上運行)

SetThreadIdealProcessor:爲線程設置理想的CPU

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