Das Javadoc für Runtime.availableProcessors()
in Java 1.6 ist erfreulich unspezifisch. Betrachtet es nur die Hardwarekonfiguration oder auch die Last? Ist es schlau genug, nicht durch Hyperthreading getäuscht zu werden? Beachtet es eine begrenzte Anzahl von Prozessoren über den Befehl linux taskset
?
Ich kann einen eigenen Datenpunkt hinzufügen: Auf einem Computer mit 12 Kernen und Hyperthreading gibt Runtime.availableProcessors () tatsächlich 24 zurück, was keine gute Zahl ist, um zu entscheiden, wie viele Threads ausgeführt werden sollen. Die Maschine war eindeutig nicht tot-leer, so dass es auch nicht in irgendeiner effektiven Weise auf die Last schauen konnte.
AFAIK, gibt Ihnen immer die Gesamtzahl der verfügbaren CPUs auch die nicht für die Planung verfügbar. Ich habe eine Bibliothek, die diese Tatsache verwendet, um reservierte CPUs zu finden. Ich lese die / proc / cpuinfo und die Standard-Thread-Affinität des Prozesses, um herauszufinden, was verfügbar ist.
Unter Windows ist GetSystemInfo verwendet und dwNumberOfProcessors
von der zurückgegebenen SYSTEM_INFO
Struktur.
Dies kann aus void os::win32::initialize_system_info()
und int os::active_processor_count()
in os_windows.cpp
des OpenJDK-Quellcodes gesehen werden.
dwNumberOfProcessors
, von der MSDN-Dokumentation sagt, dass es "die Anzahl der logischen Prozessoren in der aktuellen Gruppe" meldet, was bedeutet, dass Hyperthreading die Anzahl der CPUs erhöht berichtet.
Unter Linux verwendet os::active_processor_count()
sysconf :
Wo _SC_NPROCESSORS_ONLN
documentation 'Die Anzahl der derzeit online verfügbaren Prozessoren (verfügbar)' steht. Dies wird nicht durch die Affinität des Prozesses beeinflusst und wird auch durch Hyperthreading beeinflusst.
Laut Sun Bug 6673124 :
Der Code für
%Vor%active_processor_count
, der vonRuntime.availableProcessors()
verwendet wird, lautet wie folgt:
Dieser spezielle Code kann Solaris-spezifisch sein. Aber ich würde mir vorstellen, dass sich das Verhalten auf anderen Plattformen zumindest etwas ähneln würde.
Tags und Links java