Hallo,
ich profile gerade eine Anwendung, die mittels DataInputStream von einer TCP/IP Verbindung Daten liest. Dabei ist mir aufgefallen, dass sowohl der YourKit Profiler, als auch JProfiler eine sehr hohe CPU Time bei DataInputStream.readByte() anzeigt. Im JProfiler wird das als "blocking" dargestellt.
Meine Frage ist, is das normal? Ich dachte, readByte wartet einfach bis Daten "anliegen" und das kostet auch keine CPU Time. Ist das nur ein Darstellungs"problem", oder is da wirklich was falsch in meiner Implementierung?
Hier bissel Code (das laeuft in einem Thread):
In Zeile 2 das readByte() verbraucht auch bei maessigem Netzwerktraffic um die 60% CPU.
PS: Je laenger ich drueber nachdenke, desto logischer erscheint mir das. Der Thread is ja wirklich "blockiert" wenn er wartet. Allerdings is dann doch die Anzeige im Profiler total nervig, da auch der Hotspot-Finder immer dieses readByte anmeckert. Kennt da jemand vielleicht nen tollen Trick?
ich profile gerade eine Anwendung, die mittels DataInputStream von einer TCP/IP Verbindung Daten liest. Dabei ist mir aufgefallen, dass sowohl der YourKit Profiler, als auch JProfiler eine sehr hohe CPU Time bei DataInputStream.readByte() anzeigt. Im JProfiler wird das als "blocking" dargestellt.
Meine Frage ist, is das normal? Ich dachte, readByte wartet einfach bis Daten "anliegen" und das kostet auch keine CPU Time. Ist das nur ein Darstellungs"problem", oder is da wirklich was falsch in meiner Implementierung?
Hier bissel Code (das laeuft in einem Thread):
Java:
public void run() {
int packetId = in.readByte() & 0xff;
NetworkEvent packet = createPacket( packetId );
if( packet != null ) {
packet.decode( in );
eventDispatcher.publish(packet);
}
}
In Zeile 2 das readByte() verbraucht auch bei maessigem Netzwerktraffic um die 60% CPU.
PS: Je laenger ich drueber nachdenke, desto logischer erscheint mir das. Der Thread is ja wirklich "blockiert" wenn er wartet. Allerdings is dann doch die Anzeige im Profiler total nervig, da auch der Hotspot-Finder immer dieses readByte anmeckert. Kennt da jemand vielleicht nen tollen Trick?