Windows Internals 笔记——关联性
1.默認情況下,Windows Vista在給線程分配處理器時,使用軟關聯。意思是如果其他因素都一樣,系統將使線程在上一次運行的處理器上運行。讓線程始終在同一個處理器上運行有助于重用仍在處理器高速緩存中的數據。
?
2.有一種稱為NUMA的計算機體系結構,結構的計算機由多個系統板組成,每個系統版都有自己的CPU和內存塊。任何線程都可以在這些CPU中任何一個上運行。如果CPU需要訪問其他系統板上的內存,性能會下降的厲害。為了支持這種體系結構,Windows Vista允許我們設置進程和線程的關聯性。也就是說,我們可以控制CPU讓哪些CPU運行特定的線程。這稱為硬關聯。
?
?
3.默認情況下,系統可以將任何CPU調度給任何線程使用。如果要限制某些線程只在可用CPU的一個子集上運行,則可以調用SetProcessAffinityMask(HANDLE hProcess, DWORD_PTR dwProcessAffinityMask),第二個參數代表線程可以在哪些CPU上運行。例如傳入0x00000005意味著這個進程中的線程可以在CPU0和CPU2上運行,但是不能在CPU1和CPU3~31上運行。
?
4.請注意,子進程將繼承進程關聯性。此外,我們還可以使用作業內核對象來限制一組進程只在一組CPU上運行。
?
5.可以通過調用SetThreadAffinityMask分別設置各線程的關聯性掩碼。
?
6.當一個x86系統啟動時,系統將執行代碼,檢查主機上的哪個CPU存在著名的Pentium浮點bug。系統必須對每個CPU做這項檢查。檢查的方法是,將一個線程的關聯性設置為該CPU,執行可能會出錯的除法操作,然后比較結果是否與已知正確的結果相符。隨后再采用同樣的步驟檢查下一個CPU,依次類推。
?
7.在大多數環境里,改變線程的關聯性,將妨礙調度程序的這種能力,下面給出一個例子:
?
?
8.要給線程設置一個理想的CPU(也允許系統將它移到另一個空閑的CPU),可以調用SetThreadIdealProcessor(HANDLE hThread, DWORD dwIdealProcessor),dwIdealProcessor不是位掩碼,它是一個0到31/63之間的整數,表示線程希望設置的CPU。可以傳入MAXIMUN_PROCESSORS值(在WinNT.h中定義,32位操作系統中定義為32,64位操作系統中定義為64),表示線程沒有理想的CPU。
?
9.當Windows Vista在x86計算機上啟動時,我們可以限制系統將使用的CPU數量(修改啟動配置數據 BCD)。
轉載于:https://www.cnblogs.com/zoneofmine/p/9886002.html
總結
以上是生活随笔為你收集整理的Windows Internals 笔记——关联性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dubbo入门介绍---搭建一个最简单的
- 下一篇: 【NOIP2015】斗地主 题解