在我们的 Windows Server 2019 上,我们有 36 个内核和 72 个逻辑处理器,如任务管理器 CPU 性能窗口所示。而且,如果我从命令提示符运行命令。
echo %NUMBER_OF_PROCESSORS%
它告诉我72。
但是,在 Java 程序中,如果我运行以下代码片段,
public class NoOfCPUs {
public static void main(String[] args) {
String envName = "NUMBER_OF_PROCESSORS";
String noOfP = System.getenv(envName);
System.out.format("%s (from env) = %s%n", envName, noOfP);
}
}
输出如下:
NUMBER_OF_PROCESSORS (from env) = 36
在 Netbeans IDE 的 Windows 上使用 64 位 Java 8 编译器编译。制作了一个可执行的jar。运行罐子,如:
java -jar NoOfCPUs.jar
相同的系统环境变量,NUMBER_OF_PROCESSORS 向我显示命令提示符与 Java 程序中的不同结果。
为什么?
是不是因为 Windows 2009 版本之后使用的逻辑处理器组?逻辑处理器组在一个组中最多可容纳 64 个处理器。