多個處理器
具有多個處理器的計算機通常設計為兩種架構之一:非統一記憶體存取 (NUMA) 或對稱多重處理 (SMP)。
在 NUMA 計算機中,每個處理器比其他處理器更接近某些記憶體部分,讓記憶體存取速度比其他部分更快速。 在 NUMA 模型中,系統會嘗試在接近所使用記憶體的處理器上排程線程。 如需 NUMA 的詳細資訊,請參閱 NUMA 支援。
在 SMP 計算機中,兩個或多個相同的處理器或核心會連線到單一共用的主要記憶體。 在 SMP 模型中,任何線程都可以指派給任何處理器。 因此,在 SMP 計算機上排程線程類似於在具有單一處理器的電腦上排程線程。 不過,排程器具有處理器集區,因此它可以排程線程以並行執行。 排程仍由線程優先順序決定,但它可能會受到設定線程親和性和線程理想處理器的影響,如本主題所述。
線程親和性
線程親和性 強制線程在特定處理器子集上執行。 通常應該避免設定線程親和性,因為它可能會干擾排程器在處理器之間有效地排程線程的能力。 這可能會降低平行處理所產生的效能提升。 線程親和性的適當用法是測試每個處理器。
系統代表具有稱為處理器親和性遮罩之位掩碼的親和性。 affinity mask 是系統中處理器數目上限的大小,位設定為識別處理器子集。 一開始,系統會決定遮罩中的處理器子集。
您可以呼叫 getProcessAffinityMask 函式,以取得進程所有線程的目前線程親和性。 使用 SetProcessAffinityMask 函式來指定進程所有線程的線程親和性。 若要設定單個線程的線程親和性,請使用 SetThreadAffinityMask 函式。 線程親和性必須是進程親和性的子集。
在超過 64 個處理器的系統上,同質遮罩一開始代表單一處理器群組中的處理器。 不過,線程親和性可以設定為不同群組中的處理器,這會改變進程的同質遮罩。 如需詳細資訊,請參閱 處理器群組。
線程理想處理器
當您指定 線程理想的處理器時,排程器會盡可能在指定的處理器上執行線程。 使用 SetThreadIdealProcessor 函式來指定線程的慣用處理器。 這不保證會選擇理想的處理器,但會為排程器提供有用的提示。 在具有超過 64 個處理器的系統上,您可以使用 SetThreadIdealProcessorEx 函式來指定特定處理器群組中的慣用處理器。
相關主題