天天看點

Java網絡程式設計-BIO模型與僞異步I/O模型

推薦:​​Java網絡程式設計彙總​​

Java網絡程式設計-BIO模型與僞異步I/O模型

正文

網絡程式設計的基本模型是C/S模型,即兩個程序間的通信。

服務端提供IP和監聽端口,用戶端通過連接配接操作向服務端監聽的位址發起連接配接請求,通過三次握手連接配接,如果連接配接成功建立,雙方就可以通過套接字進行通信。

傳統的同步阻塞模型開發中,ServerSocket負責綁定IP位址,啟動監聽端口;Socket負責發起連接配接操作。連接配接成功後,雙方通過輸入和輸出流進行同步阻塞式通信。

BIO的服務端通信模型

采用BIO通信模型的服務端,通常由一個獨立的Acceptor線程負責監聽用戶端的連接配接,它接收到用戶端連接配接請求之後,為每個用戶端建立一個新的線程,對請求進行處理,處理完成後,通過輸出流傳回應答給用戶端,線程銷毀。即典型的一請求一應答模型。

傳統BIO通信模型圖:

Java網絡程式設計-BIO模型與僞異步I/O模型

該模型最大的問題就是缺乏彈性伸縮能力,當用戶端并發通路量增加後,服務端的線程個數和用戶端并發通路數呈1:1的正比關系,Java中的線程也是比較寶貴的系統資源,線程數量快速膨脹後,系統的性能将急劇下降,随着通路量的繼續增大,系統最終就死掉了。

僞異步I/O模型

為了改進這種一連接配接一線程的模型,我們可以使用線程池來管理這些線程,實作一個或多個線程處理多個用戶端請求的模型(服務端的線程個數和用戶端并發通路數呈M:N的關系,N可以遠遠大于M,但是底層還是使用的同步阻塞I/O),通常被稱為​

​“僞異步I/O模型“​

​​。

僞異步I/O模型圖:

繼續閱讀