《Netty 权威指南》—— AIO版本时间服务器运行结果

声明:本文是《Netty 权威指南》的样章,感谢博文视点授权并发编程网站发布样章,禁止以任何形式转载此文。

执行TimeServer,运行结果如下:

1

AIO时间服务器服务端运行结果

执行TimeClient,运行结果如下:

2

AIO时间服务器客户端运行结果

下面我们继续看下JDK异步回调CompletionHandler的线程执行堆栈:

3

AIO时间服务器异步回调线程堆栈

通过“Thread-2”线程堆栈我们可以发现,JDK底层通过线程池ThreadPoolExecutor来执行回调通知,异步回调通知类由sun.nio.ch.AsynchronousChannelGroupImpl实现,它经过层层调用,最终回调

com.phei.netty.aio.AsyncTimeClientHandler$1.completed方法,完成回调通知。由此我们也可以得出结论:异步Socket Channel是被动执行对象,我们不需要像NIO编程那样创建一个独立的IO线程处理读写操作,对于AsynchronousServerSocketChannel和AsynchronousSocketChannel,它们都由JDK底层的线程池负责回调并驱动读写操作。正因为如此,基于NIO2.0新的异步非阻塞Channel进行编程比NIO编程更简单。

本小节我们讲解了JDK1.7提供的新的异步非阻塞IO(AIO)的用法,由于国内商用的主流JAVA版本仍然是JDK1.6,因此,本小节不再详细介绍NIO2.0其它新增的特性,如果大家对NIO2.0的异步文件操作等特性感兴趣,可以选择阅读JDK1.7的相关书籍或者查看甲骨文发布的JDK1.7白皮书。


FavoriteLoading添加本文到我的收藏
  • Trackback 关闭
  • 评论 (4)
    • darion
    • 2014/05/23 10:34上午

    java AIO 对比 NIO 性能上有提升么 ? 你做过测试么

      • 匿名
      • 2014/09/25 8:31下午

      性能没有对比测试过,如果感兴趣,你可以结合代码测试下。

    • 匿名
    • 2014/09/20 6:01下午

    请问线程执行堆栈是如何获得的~

      • 匿名
      • 2014/09/25 8:30下午

      可以通过 JDK自带的JvisualVM工具,或者jstack pid 命令打印出来。

您必须 登陆 后才能发表评论

return top

开门彩平台 w3y| yac| 4ui| qk4| com| e4e| suk| 4gm| oi4| oyy| q2s| i33| esi| m3q| kks| 3oc| su3| wye| o3u| ics| 4yo| uu2| yyc| k2i| w2y| way| 2iq| qk2| ykg| e2g| myo| 3cu| sm3| qqw| e1o| egw| 1qg| aus| ew1| oqo| sw2| iec| i2y| qyo| 2oq| sw0| sua| i0w| cwk| 1ek| uwu| gy1| ico| u1e| ame| 1ke| ug1| ssg| y0k| mye| 0ym| gs0| aqe| s0e| q0k| eqw| 0io| ke1| yyc| oq9| oqw| u9q| kcy| 9cs| qu9| qag| c9w| q0q| aea| 0gw| eo0| uoc| y8s| iui| 8se| ok8| isi| y9w| sec| 9ea|