win下多處理器進程、線程親和性概念

 

微軟官方文檔:https://docs.microsoft.com/en-us/windows/win32/procthread/multiple-processors

 

譯文如下:

        具有多個處理器的計算機通常是爲兩種體系結構之一而設計的:非統一內存訪問(NUMA)對稱多處理(SMP)

        在NUMA計算機中,每個處理器比其他處理器更接近內存的某些部分,使得內存的某些部分的內存訪問比其他部分更快。在NUMA模型下,系統試圖在接近所用內存的處理器上調度線程。有關NUMA的更多信息,請參見NUMA支持

        在SMP計算機中,兩個或多個相同的處理器或內核連接到一個共享的主內存。在SMP模式下,任何線程都可以分配給任何處理器。因此,在SMP計算機上調度線程類似於在具有單個處理器的計算機上調度線程。然而,調度器有一個處理器池,因此它可以調度線程併發運行。調度仍然由線程優先級決定,但是它會受到設置線程相似性和線程理想處理器的影響,如本主題中所討論的。

線程關聯性

        線程親和性強制線程在特定的處理器子集上運行。通常應該避免設置線程關聯性,因爲它會干擾調度器跨處理器有效調度線程的能力。這可能會降低並行處理帶來的性能提升。線程關聯性的一個恰當使用是測試每個處理器。

        該系統用一個稱爲處理器相似性掩碼的位掩碼來表示相似性。相似性掩碼是系統中最大處理器數量的大小,通過設置位來標識處理器的子集。最初,系統確定掩碼中處理器的子集。

        您可以通過調用GetProcessAffinityMask功能。使用SetProcessAffinityMask函數爲進程的所有線程指定線程關聯性。若要爲單個線程設置線程關聯性,請使用SetThreadAffinityMask功能。線程關聯性必須是進程關聯性的子集。

        在超過64個處理器的系統上,相似性掩碼最初代表單個處理器組中的處理器。但是,線程關聯性可以設置爲不同組中的處理器,這將改變進程的關聯性掩碼。有關更多信息,請參見處理器組

線程理想處理器

        當您指定線程理想處理器,調度程序儘可能在指定的處理器上運行線程。使用SetThreadIdealProcessor函數爲線程指定首選處理器。這並不保證會選擇理想的處理器,但爲調度程序提供了有用的提示。在超過64個處理器的系統上,您可以使用SetThreadIdealProcessorEx函數指定特定處理器組中的首選處理器。

NUMA支持

處理器組

 

===================================================

===================================================

業餘時間不定期更新一些想法、思考文章,歡迎關注,共同探討,沉澱技術!

            

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