傳統BIO
編程
網絡編程的基本模型是C/S模型(client/server),即兩個進程間的通訊。網絡
服務端提供IP地址
和監聽端口,客戶端經過鏈接操做想服務端監聽的地址發起鏈接請求,經過三次握手鍊接,若是鏈接成功創建,雙方就能夠經過套接字進行通訊。併發
傳統的同步阻塞模型開發中,ServerSocket
負責綁定IP
地址,啓動監聽端口;Socket負責發起鏈接操做。鏈接成功後,雙方經過輸入和輸出流進行同步阻塞式通訊。ide
簡單的描述一下BIO
的服務端通訊模型:採用BIO
通訊模型的服務端,一般由一個獨立的Acceptor
線程負責監聽客戶端的鏈接,它接收到客戶端鏈接請求以後爲每一個客戶端建立一個新的線程進行鏈路處理沒處理完成後,經過輸出流返回應答給客戶端,線程銷燬。請求響應模式,請求與響應比例=1:1
請求----響應
性能
傳統BIO
通訊模型圖:spa
該模型最大的問題就是缺少彈性伸縮能力,當客戶端併發訪問量增長後,服務端的線程個數和客戶端併發訪問數呈1:1的正比關係,Java中的線程也是比較寶貴的系統資源,線程數量快速膨脹後,系統的性能將急劇降低,隨着訪問量的繼續增大,系統最終就會資源耗盡,而後就是面臨系統掛掉。線程
服務端代碼code
{ ; ([] ) { (); } ( ) { ; ; ; { (); ..(); .(); ( ) { ( (.())); ..( .()); (.(), ); .(); } } ( ) { ..(); .(); } { ( ) { { .(); } ( ) { .(); } } ( ) { .(); } ( ) { { .(); } ( ) { .(); } } } } }
客戶端代碼orm
{ ; ; ([] ) { (, ); } ( , ) { ; ; ; { (, ); ..(); ( (.())); (.(), ); .(); ..( .()); } ( ) { .(); } ( ) { .(); } { ( ) { .(); } ( ) { { .(); } ( ) { .(); } } ( ) { { .(); } ( ) { .(); } } } } }
啓動服務端server
客戶端啓動
相應服務端收到請求
好了,傳統入門級BIO就這樣了,期待升級版BIO。