多個處理器

具有多個處理器的電腦通常設計成兩種架構之一:非統一記憶體存取 (NUMA) 或對稱式多處理 (SMP) 。

在 NUMA 電腦中,每個處理器會比其他處理器更接近某些部分的記憶體,讓記憶體存取速度比其他部分更快速。 在 NUMA 模型中,系統會嘗試在接近所使用記憶體的處理器上排程執行緒。 如需 NUMA 的詳細資訊,請參閱 NUMA 支援

在 SMP 電腦中,兩個或多個相同的處理器或核心會連線到單一共用主記憶體。 在 SMP 模型中,任何執行緒都可以指派給任何處理器。 因此,在 SMP 電腦上排程執行緒類似于在具有單一處理器的電腦上排程執行緒。 不過,排程器具有處理器集區,因此它可以排程執行緒同時執行。 排程仍取決於執行緒優先順序,但可以透過設定執行緒親和性和執行緒理想處理器來影響,如本主題所述。

執行緒親和性

執行緒親和性 會強制執行緒在特定處理器子集上執行。 通常應該避免設定執行緒親和性,因為它可能會干擾排程器在處理器之間有效地排程執行緒的能力。 這可能會降低平行處理所產生的效能提升。 執行緒親和性的適當用法正在測試每個處理器。

系統代表具有稱為處理器親和性遮罩的位元遮罩親和性。 affinity mask 是系統中處理器數目上限的大小,而位會設定為識別處理器子集。 一開始,系統會決定遮罩中的處理器子集。

您可以呼叫 GetProcessAffinityMask 函式,以取得進程所有線程的目前線程親和性。 使用 SetProcessAffinityMask 函式來指定進程所有線程的執行緒親和性。 若要設定單一線程的執行緒親和性,請使用 SetThreadAffinityMask 函 式。 執行緒親和性必須是進程親和性的子集。

在具有超過 64 個處理器的系統上,同質遮罩一開始代表單一處理器群組中的處理器。 不過,執行緒親和性可以設定為不同群組中的處理器,這會改變進程的親和性遮罩。 如需詳細資訊,請參閱 處理器群組

執行緒理想處理器

當您指定 執行緒理想處理器時,排程器會盡可能在指定的處理器上執行執行緒。 使用 SetThreadIdealProcessor 函 式來指定執行緒的慣用處理器。 這不保證會選擇理想的處理器,但會為排程器提供有用的提示。 在超過 64 個處理器的系統上,您可以使用 SetThreadIdealProcessorEx 函式,在特定處理器群組中指定慣用的處理器。

NUMA 支援

處理器群組