官术网_书友最值得收藏!

2.2.2 偽異步式I/O創建的TimeServer源碼分析

我們對服務端代碼進行一些改造,代碼如下。

代碼清單2-4 偽異步I/O的TimeServer

偽異步I/O的主函數代碼發生了變化,我們首先創建一個時間服務器處理類的線程池,當接收到新的客戶端連接的時候,將請求Socket封裝成一個Task,然后調用線程池的execute方法執行,從而避免了每個請求接入都創建一個新的線程。

代碼清單2-5 偽異步I/O的TimeServerHandlerExecutePool

由于線程池和消息隊列都是有界的,因此,無論客戶端并發連接數多大,它都不會導致線程個數過于膨脹或者內存溢出,相比于傳統的一連接一線程模型,是一種改良。

由于客戶端代碼并沒有改變,因此,我們直接運行服務端和客戶端,執行結果如下。服務端運行結果如圖2-6所示。

圖2-6 偽異步I/O時間服務器服務端運行結果

客戶端運行結果如圖2-7所示。

圖2-7 偽異步I/O時間服務器客戶端運行結果

偽異步I/O通信框架采用了線程池實現,因此避免了為每個請求都創建一個獨立線程造成的線程資源耗盡問題。但是由于它底層的通信依然采用同步阻塞模型,因此無法從根本上解決問題。下個小節我們對偽異步I/O進行深入分析,找到它的弊端,然后看看NIO是如何從根本上解決這個問題的。

主站蜘蛛池模板: 枣强县| 张家川| 永年县| 渭南市| 哈尔滨市| 类乌齐县| 游戏| 普兰店市| 海林市| 商城县| 西峡县| 沾益县| 通江县| 南部县| 寻乌县| 太谷县| 灵寿县| 平顺县| 比如县| 罗源县| 马关县| 重庆市| 三门峡市| 保康县| 闸北区| 甘德县| 寻甸| 沿河| 清远市| 兴宁市| 方正县| 中方县| 前郭尔| 北安市| 沐川县| 永新县| 沁水县| 大庆市| 资溪县| 河北省| 蓬溪县|