1. 程式人生 > >《Netty 權威指南》—— AIO版本時間伺服器執行結果

《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白皮書。