# Profiler und readByte()



## schalentier (8. Apr 2011)

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):

```
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?


----------



## FArt (8. Apr 2011)

Ein Thread, der blockiert verbraucht aber keine "CPU Zeit"... alles andere wäre busy waiting, was hier aber nicht der Fall ist.


----------



## schalentier (8. Apr 2011)

Okay, dann bin ich ja erstmal beruhigt und les nun doch erstmal die Doku zum Profiler... ^^ Da steht einfach nur Time (inherent und average).


----------

