微软官方文档:https://docs.microsoft.com/en-us/windows/win32/procthread/processor-groups
译文如下:
64位版本的Windows 7和Windows Server 2008 R2及更高版本的Windows在一台计算机上支持64个以上的逻辑处理器。此功能在32位版本的Windows上不可用。
具有多个物理处理器的系统或具有多个内核的物理处理器的系统为操作系统提供了多个逻辑处理器。A逻辑处理器从操作系统、应用程序或驱动程序的角度来看,是一个逻辑计算引擎。A核心是一个处理器单元,可以由一个或多个逻辑处理器组成。A物理处理器可以由一个或多个内核组成。物理处理器与处理器包、插槽或中央处理器相同。
对超过64个逻辑处理器的系统的支持基于处理器组,它是一个最多64个逻辑处理器的静态集合,被视为单个调度实体。处理器组从0开始编号。逻辑处理器少于64个的系统始终只有一个组,即组0。
Windows Server 2008、Windows Vista、Windows Server 2003和Windows XP:不支持处理器组。
当系统启动时,操作系统创建处理器组并将逻辑处理器分配给这些组。如果系统能够热添加处理器,操作系统会在系统运行时为可能到达的处理器留出分组空间。操作系统将系统中的组数减至最少。例如,一个有128个逻辑处理器的系统将有两个处理器组,每组有64个处理器,而不是四个组,每组有32个逻辑处理器。
为了获得更好的性能,操作系统在将逻辑处理器分配给组时会考虑物理位置。如果可能,内核中的所有逻辑处理器和物理处理器中的所有内核都被分配到同一组。物理上彼此接近的物理处理器被分配到同一组。除非NUMA节点的容量超过最大组大小,否则该节点将被分配给单个组。有关更多信息,请参见NUMA支持。
在64个或更少处理器的系统上,现有应用程序无需修改即可正常运行。不调用任何使用处理器关联掩码或处理器号的函数的应用程序将在所有系统上正常运行,而不管处理器的数量。要在超过64个逻辑处理器的系统上正确运行,可能需要修改以下类型的应用程序:
- 管理、维护或显示整个系统的每个处理器信息的应用程序必须进行修改,以支持64个以上的逻辑处理器。这种应用程序的一个例子是窗口任务管理器,它显示系统中每个处理器的工作负载。
- 对于性能至关重要并且可以有效扩展到64个逻辑处理器以上的应用程序,必须进行修改才能在此类系统上运行。例如,数据库应用程序可能受益于修改。
- 如果应用程序使用的动态链接库具有每个处理器的数据结构,并且动态链接库没有被修改为支持64个以上的逻辑处理器,则应用程序中调用动态链接库导出的函数的所有线程必须被分配给同一个组。
默认情况下,应用程序被限制在一个组中,这应该为典型应用程序提供足够的处理能力。操作系统最初在系统中的组之间以循环方式将每个进程分配给单个组。一个进程开始被分配给一个组执行。进程的第一个线程最初在该进程被分配到的组中运行。每个新创建的线程与创建它的线程被分配到同一个组。
一个应用程序需要使用多个组,这样它就可以在超过64个处理器上运行,它必须明确地决定在哪里运行它的线程,并负责将线程的处理器亲缘关系设置到所需的组。这INHERIT_PARENT_AFFINITY标志可用于指定父进程(可能不同于当前进程),从中生成新进程的关联。如果进程在单个组中运行,它可以使用GetProcessAffinityMask和SetProcessAffinityMask同时保持在同一组中;如果修改了进程关联,新的关联将应用到它的线程。
可以在创建时使用进程_线程_属性_组_相似性属性的扩展属性CreateRemoteThreadEx功能。创建线程后,可以通过调用SetThreadAffinityMask或者SetThreadGroupAffinity。如果线程被分配到与进程不同的组,则进程的相似性被更新以包括线程的相似性,并且进程成为多组进程。必须对单个线程进行进一步的相似性更改;不能使用修改多组进程的相似性SetProcessAffinityMask。这GetProcessGroupAffinity函数检索进程及其线程被分配到的组的集合。
若要为与作业对象关联的所有进程指定关联性,请使用SetInformationJobObject函数与JobObjectGroupInformation或者JobObjectGroupInformationEx信息类。
逻辑处理器由其组号和组相关处理器号来标识。这由一个处理器号结构。遗留函数使用的数字处理器号是相对于组的。
有关支持64个以上处理器的操作系统体系结构变化的讨论,请参见白皮书支持超过64个处理器的系统。
有关支持处理器组的新功能和结构的列表,请参见流程和线程中的新内容。
相关主题
若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!
同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。