線程的調度、優先順序和親緣性

來源:互聯網
上載者:User

幾個知識點:

1.使用SuspendThread和ResumeThread來暫停和恢複線程的運行。

2.通過Sleep函數,線程可以告訴系統,它不想在某個時間段內被調度。系統將在大約的指定毫秒數內使線程不可調度。如果給Sleep函數傳遞0,表示調用線程將釋放剩餘的時間片,並迫使系統調度另一個線程。

3.系統提供了一個稱為SwitchToThread的函數,使得另一個可調度線程(如果存在的話)能夠運行。

4.當要計算線程執行某個任務需要多長時間時,如果採用GetTickCount,則假設了當前線程不會被中斷。因此我們需要一個函數,以便返回當前線程得到的CPU時間的數量,GetThreadTimes函數可以做到。GetProcessTimes是針對進程的相對應的函數,適用於進程中的所有線程。

5.Windows還提供了一些高解析度效能函數:QueryPerformanceFrequency以及QueryPerformanceCounter。

6.Windows允許使用GetThreadContext和SetThreadContext來擷取和設定線程的上下文,不過在擷取和設定之前,應該先暫停線程。

7.當系統引導時,它會建立一個特殊的線程,稱為0頁麵線程。該線程被賦予優先順序0。它是整個系統中唯一的一個在優先順序0上啟動並執行線程。當系統中沒有任何線程需要執行操作時,0頁線程負責將系統中的所有空閑RAM頁面置0。

8.進程可以使用SetPriorityClass和GetPriorityClass來設定和查詢優先順序類。線程可以使用SetThreadPriority和GetThreadPriority來設定和查詢線程的優先順序。

9.系統可以為基本優先順序等級在動態優先順序範圍(1~15)內的線程動態提高線程的優先順序等級(如:當低優先順序的線程處於CPU饑渴狀態時,或者當一個進程是前台進程時),但是系統也絕不會將優先順序提高到即時範圍(高於15)。

10.可以使用SetProcessPriorityBoost和SetThreadPriorityBoost來使動態提高線程優先順序等級的功能不起作用。函數GetProcessProrityBoost和GetThreadPriorityBoost用於查詢。

11.使用SetProcessAffinityMask和GetProcessAffinityMask來設定和擷取進程的親緣性。使用SetThreadAffinityMask來為各個線程設定親緣性屏蔽。若要為線程設定一個理想的CPU,可以調用SetThreadIdleProcessor。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.