Я хочу сделать некоторые настройки для многопоточной программы.
Если я знаю, сколько потоков действительно может работать параллельно, я могу сделать программу намного более эффективной.
Есть ли способЯва, чтобы получить эту информацию?
Вы можете использовать
Runtime.getRuntime().availableProcessors()
Но это, скорее, лучшее предположение и даже упомянутое API
Это значение может измениться во время определенного вызова виртуального машина. Приложения, чувствительные к количеству доступных поэтому процессоры должны иногда опрашивать это свойство и корректировать их использование ресурсов надлежащим образом.
Одно замечание о методе availableProcessors (), он не различает физический процессор и виртуальный процессор. например, если на вашем компьютере включена поддержка гиперпоточности, это число будет вдвое больше физического процессора (что немного расстраивает). к сожалению, нет способа определить реальный или виртуальный процессор в чистой 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.
SYSTEM_INFO
GetNativeSystemInfo
dwNumberOfProcessors
Я полагаю, что это даст фактическое количество установленных процессоров, а не число доступных