启动与系统组件

%NUMBEROFPROCESSORS% 环境变量可能显示不正确的值 - Windows Server

· 52CE 我爱测

本文有助于解决环境变量在具有 64 个以上逻辑处理器的系统上可能显示错误值的问题 %NUMBEROFPROCESSORS% 。 你有一个具有 64 位以上的逻辑处理器的 64 位 Windows 系统。 检查 %NUMBEROFPROCESSORS% 环境变量时,你会发现该值不正确,并且小于系统中的处理器总数。 例如,具有 72 个逻辑处理器的系统有两个处理器组,每个组包含 36 个逻辑处理器。 该值 %NUMBEROFPROCESSORS% 为 36,但

本文有助于解决环境变量在具有 64 个以上逻辑处理器的系统上可能显示错误值的问题 %NUMBER_OF_PROCESSORS% 。

你有一个具有 64 位以上的逻辑处理器的 64 位 Windows 系统。 检查 %NUMBER_OF_PROCESSORS% 环境变量时,你会发现该值不正确,并且小于系统中的处理器总数。 例如,具有 72 个逻辑处理器的系统有两个处理器组,每个组包含 36 个逻辑处理器。 该值 %NUMBER_OF_PROCESSORS% 为 36,但预期值为 72。

支持大于 64 个逻辑处理器的系统

逻辑处理器是从操作系统、应用程序或驱动程序的角度来看的逻辑计算引擎。 基于创建处理器组,在 Windows 7 中添加了对超过 64 个逻辑处理器的系统的支持。

处理器组是一组最多 64 个逻辑处理器,由操作系统视为单个计划实体,默认情况下,每个进程仅分配给一个处理器组。

仅计算当前处理器组

环境变量 %NUMBER_OF_PROCESSORS% 反映进程分配的处理器组中的处理器数,并且继承自 Windows 会话管理器(smss.exe)。 在 Windows 11 和 Windows Server 2022 之前, smss.exe 无法识别处理器组。 默认计划程序行为是将应用程序分配到单个处理器组。 在这种情况下,仅计算当前处理器组。

只有系统进程在系统启动时分配了一个多组关联。 若要使用系统中的完整处理器集,所有其他进程都需要将线程分配到其他组。

如果应用程序需要使用多个组在 64 个以上的处理器上运行,则需要确定运行其线程的位置。 应用程序负责设置所需组的线程相关性。

将系统更新到 Windows 11 或 Windows Server 2022

可以将系统更新到 Windows 11 或 Windows Server 2022。 从 Windows 11 和 Windows Server 2022 开始,在处理器超过 64 的计算机上,进程及其线程默认跨多个组跨系统中的所有处理器。 此外,从 Windows 11 版本 22H2 开始, %NUMBER_OF_PROCESSORS% 环境变量反映系统上的处理器总数,即使它们分布在多个处理器组中也是如此。

将应用程序线程相关性设置为所需的组

如果操作系统在 Windows 11 或 Windows Server 2022 之前,则可以将应用程序线程关联设置为所需的组。

可以通过将PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY扩展属性与 CreateRemoteThreadEx函数一起使用来指定线程的关联。 创建线程后,可以通过调用 SetThreadAffinityMask 或 SetThreadGroupAffinity 函数来更改其相关性。

详细信息

资料来源与适用范围

资料来源
微软官方中文故障文档
适用范围
按正文的 Windows / Windows Server 适用版本;保留原文兼容性要求
内容语言
中文;命令、路径和错误标识保留技术原文
本地收录日期
2026-10-26
授权说明
CC BY 4.0

正文与所需资源由本站本地存储。查看来源及更新记录 ↗

请按适用版本和实际日志确认原因;本站没有对每一种系统或设备逐项执行文中的操作。