Я хочу сделать некоторую настройку для многопоточной программы.
Если я знаю, сколько потоков действительно может работать параллельно, я могу сделать программу более эффективной.
Есть ли способ в Java получить эту информацию?
Я хочу сделать некоторую настройку для многопоточной программы.
Если я знаю, сколько потоков действительно может работать параллельно, я могу сделать программу более эффективной.
Есть ли способ в Java получить эту информацию?
Вы можете использовать
Runtime.getRuntime().availableProcessors()
Но его более полное предположение и даже упомянутое API
Это значение может изменяться во время конкретного вызова виртуального машина. Приложения, чувствительные к числу доступных поэтому процессоры должны периодически опробовать это свойство и настроить их использование ресурсов соответствующим образом.
Одна заметка о методе доступныхпроцессоров(), в нем не проводится различие между физическим процессором и виртуальным процессором. например, если на вашем компьютере включена гиперпоточность, число будет в два раза больше физического процессора (что немного расстраивает). к сожалению, нет способа определить реальный vs. virtual cpus в чистой java.
Runtime.getRuntime().availableProcessors();
Как насчет (фрагменты кода говорят 1000 слов):
public class Main {
/**
* Displays the number of processors available in the Java Virtual Machine
*/
public void displayAvailableProcessors() {
Runtime runtime = Runtime.getRuntime();
int nrOfProcessors = runtime.availableProcessors();
System.out.println("Number of processors available to the Java Virtual Machine: " + nrOfProcessors);
}
public static void main(String[] args) {
new Main().displayAvailableProcessors();
}
}
Да, конечно. JNA с kernel32.dll. Используйте SYSTEM_INFO
структуру из вызова GetNativeSystemInfo
. Между прочим есть dwNumberOfProcessors
.
Я считаю, что это обеспечит фактическое количество установленных процессоров, а не количество доступных.