微軟官方文檔: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函數指定特定處理器組中的首選處理器。
相關主題
===================================================
===================================================
業餘時間不定期更新一些想法、思考文章,歡迎關注,共同探討,沉澱技術!