Hi Tee,<br><br>I tried to test the performance of Netty(3.2alpha3) and Tomcat, and dispointedly found that Netty is not much faster than tomcat as I expected.<br><br>The result is here,<br><a href="http://jiming.javaeye.com/blog/618026">http://jiming.javaeye.com/blog/618026</a><br>

<br>Today, I profiled the netty example by JProfiler and found that it is possible to improve the performance.<br>following is partial result of JProfiler, wish could be useful.<br><br>StackTrace of havest method one:<br>

  37.7% - 37,486 ms - 10,001 inv. org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream<br>  37.7% - 37,435 ms - 10,001 inv. org.jboss.netty.example.http.snoop.HttpRequestHandler.messageReceived<br>  36.8% - 36,538 ms - 10,001 inv. org.jboss.netty.example.http.snoop.HttpRequestHandler.writeResponse<br>

  20.4% - 20,253 ms - 10,001 inv. org.jboss.netty.channel.AbstractChannel.write<br>  20.3% - 20,198 ms - 10,001 inv. org.jboss.netty.channel.Channels.write<br>  20.3% - 20,156 ms - 10,001 inv. org.jboss.netty.channel.Channels.write<br>

  19.9% - 19,733 ms - 10,001 inv. org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream<br>  19.7% - 19,546 ms - 10,001 inv. org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream<br>  19.6% - 19,453 ms - 10,001 inv. org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream<br>

  11.7% - 11,595 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpMessageEncoder.encode<br>  3.7% - 3,667 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpResponseEncoder.encodeInitialLine<br>  3.4% - 3,337 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpMessageEncoder.encodeHeaders<br>

  2.3% - 2,311 ms - 10,001 inv. org.jboss.netty.buffer.ChannelBuffers.wrappedBuffer<br>  0.7% - 738 ms - 20,002 inv. org.jboss.netty.buffer.DynamicChannelBuffer.writeByte<br>  0.7% - 662 ms - 10,001 inv. org.jboss.netty.buffer.ChannelBuffers.dynamicBuffer<br>

  0.3% - 273 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpCodecUtil.isTransferEncodingChunked<br>  7.6% - 7,560 ms - 10,001 inv. org.jboss.netty.channel.Channels.write<br>  12.1% - 11,971 ms - 10,001 inv. org.jboss.netty.channel.DefaultChannelFuture.addListener<br>

  1.7% - 1,665 ms - 10,001 inv. org.jboss.netty.buffer.ChannelBuffers.copiedBuffer<br>  0.7% - 662 ms - 10,001 inv. org.jboss.netty.handler.codec.http.DefaultHttpMessage.setHeader<br>  0.6% - 557 ms - 10,001 inv. org.jboss.netty.handler.codec.http.DefaultHttpMessage.setContent<br>

  0.5% - 506 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpHeaders.isKeepAlive<br>  0.4% - 349 ms - 10,001 inv. org.jboss.netty.handler.codec.http.DefaultHttpMessage.getHeader<br>  0.3% - 257 ms - 10,001 inv. org.jboss.netty.handler.codec.http.DefaultHttpResponse.&lt;init&gt;<br>

<br>StackTrace of havest method two:<br>  34.9% - 34,613 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpMessageDecoder.decode<br>  34.8% - 34,562 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpMessageDecoder.decode<br>

  26.0% - 25,807 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpMessageDecoder.readHeaders<br>  21.2% - 21,087 ms - 40,004 inv. org.jboss.netty.handler.codec.http.HttpMessageDecoder.readHeader<br>  19.2% - 19,087 ms - 770,077 inv. org.jboss.netty.handler.codec.replay.ReplayingDecoderBuffer.readByte<br>

  8.8% - 8,718 ms - 770,077 inv. org.jboss.netty.buffer.AbstractChannelBuffer.readByte<br>  5.4% - 5,318 ms - 770,077 inv. org.jboss.netty.buffer.DynamicChannelBuffer.getByte<br>  1.8% - 1,797 ms - 770,077 inv. org.jboss.netty.buffer.HeapChannelBuffer.getByte<br>

  5.1% - 5,102 ms - 770,077 inv. org.jboss.netty.handler.codec.replay.ReplayingDecoderBuffer.checkReadableBytes<br>  2.0% - 1,991 ms - 30,003 inv. org.jboss.netty.handler.codec.http.HttpMessageDecoder.splitHeader<br>  1.6% - 1,569 ms - 30,003 inv. org.jboss.netty.handler.codec.http.DefaultHttpMessage.addHeader<br>

  0.3% - 343 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpHeaders.getContentLength<br>  0.3% - 293 ms - 10,001 inv. org.jboss.netty.handler.codec.http.DefaultHttpMessage.isChunked<br>  4.4% - 4,378 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpMessageDecoder.readLine<br>

  0.9% - 885 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpMessageDecoder.splitInitialLine<br>  0.8% - 796 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpRequestDecoder.createMessage<br>  0.7% - 738 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpMessageDecoder.skipControlCharacters<br>

  0.7% - 696 ms - 30,003 inv. org.jboss.netty.handler.codec.replay.ReplayingDecoder.checkpoint(java.lang.Enum)<br>  0.4% - 417 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpMessageDecoder.reset<br>  0.3% - 286 ms - 10,001 inv. org.jboss.netty.handler.codec.http.HttpHeaders.getContentLength<br>

<br><br><br><br clear="all">谢谢<br><br>刘继明<br>