多个处理器

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

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

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

线程相关性

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

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

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

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

线程理想处理器

指定 线程理想处理器时,计划程序在指定的处理器上运行线程(如果可能)。 使用 SetThreadIdealProcessor 函数指定线程的首选处理器。 这不能保证将选择理想的处理器,但会向计划程序提供有用的提示。 在处理器超过 64 的系统上,可以使用 SetThreadIdealProcessorEx 函数指定特定处理器组中的首选处理器。

NUMA 支持

处理器组