На нашем Windows Server 2019 у нас 36 ядер и 72 логических процессора, как показано в окне производительности ЦП диспетчера задач. А также, если из командной строки, если я запустил команду.
echo %NUMBER_OF_PROCESSORS%
Он сообщает мне 72.
Однако изнутри программы Java, если я запустил следующий код snippet,
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
Скомпилировано с помощью 64-разрядного Java 8 компилятора на Windows в IDE Netbeans. Сделал исполняемый jar. Запустите банку, как:
java -jar NoOfCPUs.jar
Та же переменная системной среды, NUMBER_OF_PROCESSORS показывает мне другой результат из командной строки и из программы Java.
Почему?
Это из-за группы логических процессоров, которую Windows использует после версии 2009 года? Группа логических процессоров содержит максимум 64 процессора в группе.