多个处理器

具有多个处理器的计算机通常设计为两种体系结构之一:非统一内存访问(NUMA)或对称多处理(SMP)。

在 NUMA 计算机中,每个处理器比其他处理器更接近某些内存部分,使某些内存部分的内存访问比其他部分更快。 在 NUMA 模型下,系统尝试在靠近所用内存的处理器上计划线程。 有关 NUMA 的详细信息,请参阅 NUMA 支持

在 SMP 计算机中,两个或多个相同的处理器或核心连接到单个共享主内存。 在 SMP 模型中,任何线程都可以分配给任何处理器。 因此,SMP 计算机上的计划线程类似于在具有单个处理器的计算机上计划线程。 但是,计划程序有一个处理器池,以便它可以计划线程以并发运行。 计划仍由线程优先级确定,但可以通过设置线程相关性和线程理想处理器来影响,如本主题中所述。

线程相关性

线程相关性 强制线程在特定处理器子集上运行。 通常应避免设置线程相关性,因为它可能会干扰计划程序跨处理器有效地计划线程的能力。 这可以减少并行处理产生的性能提升。 适当地使用线程相关性正在测试每个处理器。

系统表示具有名为处理器相关性掩码的位掩码的相关性。 关联掩码是系统中最大处理器数的大小,位设置为标识处理器子集。 最初,系统确定掩码中的处理器子集。

可以通过调用 GetProcessAffinityMask 函数来获取进程的所有线程的当前线程相关性。 使用 SetProcessAffinityMask 函数为进程的所有线程指定线程相关性。 若要设置单个线程的线程相关性,请使用 SetThreadAffinityMask 函数。 线程相关性必须是进程相关性的子集。

在处理器数超过 64 的系统上,相关性掩码最初表示单个处理器组中的处理器。 但是,线程相关性可以设置为不同组中的处理器,这会更改进程的相关性掩码。 有关详细信息,请参阅 处理器组

线程理想处理器

指定 线程理想处理器时,计划程序尽可能在指定的处理器上运行线程。 使用 SetThreadIdealProcessor 函数指定线程的首选处理器。 这不能保证将选择理想的处理器,但为计划程序提供了有用的提示。 在具有 64 个以上的处理器的系统上,可以使用 SetThreadIdealProcessorEx 函数指定特定处理器组中的首选处理器。

NUMA 支持

处理器组