天天看點

《Netty 權威指南》—— AIO版本時間伺服器運作結果

執行timeserver,運作結果如下:

《Netty 權威指南》—— AIO版本時間伺服器運作結果

aio時間伺服器服務端運作結果

執行timeclient,運作結果如下:

《Netty 權威指南》—— AIO版本時間伺服器運作結果

aio時間伺服器用戶端運作結果

下面我們繼續看下jdk異步回調completionhandler的線程執行堆棧:

《Netty 權威指南》—— AIO版本時間伺服器運作結果

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