Gibt es eine Möglichkeit, herauszufinden, auf welchem Prozessor (entweder auf einem einzelnen System oder auf mehreren Systemen) Ihr Thread läuft, wenn Sie native Java-Threads verwenden? Wenn nicht, gibt es eine Bibliothek, die dabei helfen könnte?
Antworten
Zu viele Anzeigen?Der Thread-Scheduler der JVM ist JVM-spezifisch, daher gibt es keine "universelle" Lösung. Soweit ich weiß, gibt es nichts out-of-the-box, aber vielleicht mit:
- die Sun JVM;
- Solaris - oder Mac, als Tom Hawtin - Reißleine weist darauf hin;
- DTrace .
haben Sie vielleicht etwas Glück:
- eine Spur verfolgen
thread-start
Sonde, die alsargs[3]
die "Die native/OS-Thread-ID. Dies ist die vom Host-Betriebssystem zugewiesene ID " - die native/OS-Thread-ID mit Hilfe von Solaris-spezifischen Dienstprogrammen auf eine CPU abbilden.
Soweit ich weiß, unterstützt das Standard-JDK dies nicht (zumindest bis JDK 6). Wenn es das ist, was Sie wirklich brauchen, müssen Sie wahrscheinlich einige native Aufrufe mit JNI ausführen. Ein schönes Beispiel finden Sie unter aquí (Es ist zwar nicht genau das, was Sie brauchen, aber ich glaube, es ist ein guter Anfang).
Es gibt übrigens noch viele andere Informationen, die Sie vom JDK erhalten können, wenn Sie die ThreadMXBean-Klasse verwenden (z. B. die CPU-Auslastung pro Thread), und vielleicht finden Sie, was Sie suchen dort .
Das Betriebssystem plant Threads auf verschiedenen Prozessoren zu unterschiedlichen Zeiten. Selbst wenn Sie also einen Schnappschuss davon erhalten, wo jeder Thread zu einem bestimmten Zeitpunkt läuft, kann dieser innerhalb von Millisekunden veraltet sein.
Was ist das Problem, das Sie zu lösen versuchen? Vielleicht können Sie tun, was Sie wollen, ohne dies wissen zu müssen.