Frage

Ich habe eine blockierende Warteschlange und Arbeiter aus dieser Warteschlange und arbeite dann für ungefähr 1-10 ms.

Ich möchte eine relative Figur herausfinden, wie viel Zeit der Arbeiter in einem bestimmten Zeitrahmen aktiv und untätig war (z. B. 70% in letzter Minute).

Die Summierung der kurzen 1 ms Perioden kann darin bestehen, die Nano -Zeit zu ungenau und zu erreichen, die viel Leistung verbraucht.

Gibt es eine ordentliche Möglichkeit, eine solche Aufgabe zu erledigen?

Ich habe diese Warteschlangen-Arbeiter-Setups öfter in meinem Code, deshalb möchte ich in der Lage sein, Engpässe zur Laufzeit zu profilieren.

BEARBEITEN: Ich möchte nur wissen, ob der Thread funktionieren könnte. Wenn das Betriebssystem den Thread aus dem Verarbeitungsfokus herausschaltet, zählt er weiterhin. Nur wenn Sie auf die Warteschleuse warten, sollten Sie als Leerlaufzeit gezählt werden.

War es hilfreich?

Lösung

Was ist mit einem Ansatz, der den Thread.GetState () eines jeden Threads in Ihrem Pool probiert und dann die % der Threads berichtet, die in jedem Zustand waren, als Proben entnommen wurden?

Auf diese Weise konnten Sie ein Gefühl dafür bekommen, wie oft Fäden in neuer, laufbarer, blockierter, wartender, zeitlichem Timed_Waiting und Kündigung gefunden wurden.

Der einzige andere Ansatz, den ich mir vorstellen kann, ist, Ihren Code in einem Profiling -Tool auszuführen. Der Java-Profiler von YourKit ist sehr nett und verfügt über eine Probe-Lizenz von 1530 Tagen ...

http://www.yourkit.com/java/profiler/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top