在我们的 Windows Server 2019 上,我们有 36 个内核和 72 个逻辑处理器,如任务管理器 CPU 性能窗口所示。而且,如果我从命令提示符运行命令。
echo %NUMBER_OF_PROCESSORS%
它告诉我72
。但是,在 Java 程序中,如果我运行以下代码片段,
int cores = Runtime.getRuntime().availableProcessors();
String procrs = System.getenv("NUMBER_OF_PROCESSORS");
的价值cores
和procrs
向我展示, as 36
, each. 相同的系统变量 NUMBER_OF_PROCESSORS 向我显示命令提示符与 Java 程序中的不同结果。为什么?
我知道,系统变量 NUMBER_OF_PROCESSORS 会自动设置,不需要手动干预。处理器组上的 Microsoft 文档链接指出:
对具有超过 64 个逻辑处理器的系统的支持基于处理器组的概念,它是最多 64 个逻辑处理器的静态集合,被视为单个调度实体。处理器组从 0 开始编号。少于 64 个逻辑处理器的系统始终只有一个组,即组 0。
这是从我的 Java 代码片段中向我显示 36 的原因吗?