2.1.1 BIO通信模型圖
首先,我們通過圖2-1所示的通信模型圖來熟悉下BIO的服務端通信模型:采用BIO通信模型的服務端,通常由一個獨立的Acceptor線程負責監聽客戶端的連接,它接收到客戶端連接請求之后為每個客戶端創建一個新的線程進行鏈路處理,處理完成之后,通過輸出流返回應答給客戶端,線程銷毀。這就是典型的一請求一應答通信模型。

圖2-1 同步阻塞I/O服務端通信模型(一客戶端一線程)
該模型最大的問題就是缺乏彈性伸縮能力,當客戶端并發訪問量增加后,服務端的線程個數和客戶端并發訪問數呈1:1的正比關系,由于線程是Java虛擬機非常寶貴的系統資源,當線程數膨脹之后,系統的性能將急劇下降,隨著并發訪問量的繼續增大,系統會發生線程堆棧溢出、創建新線程失敗等問題,并最終導致進程宕機或者僵死,不能對外提供服務。
下面的兩個小節,我們會分別對服務端和客戶端進行源碼分析,尋找同步阻塞I/O的弊端。