8 Stimmen

Welcher Java-Thread läuft auf welchem Prozessor?

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?

2voto

Robert Munteanu Punkte 64955

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 als args[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.

0voto

Matthew Flaschen Punkte 266507

Ich habe noch nie von einem solchen Aufruf gehört, und ich bezweifle sehr, dass es einen gibt, da er nicht wirklich notwendig ist und zusätzlichen plattformspezifischen Code erfordern würde.

0voto

Gadi Punkte 442

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 .

0voto

Peter Lawrey Punkte 511323

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X