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