I/O模型和Java的三種I/O的區別

I/O模型和Java的三種I/O的區別

一、I/O模型:
1、阻塞I/O模型:
  最常用的I/O模型就是阻塞I/O模型,缺省情形下,所有文件操作都是阻塞的。在進程空間中調用recvfrom,其系統調用直到數據包到達且被複制到應用進程的緩衝區中或者發生錯誤時才返回,在此期間一直會等待,進程在從調用recvfrom開始到它返回到整段時間內都是被阻塞的,因此被稱爲阻塞I/O模型。
2、非阻塞I/O模型:
3、I/O複用模型
4、信號驅動I/O模型
5、異步I/O
二、BIO、NIO、AIO的區別:
  網絡編程的基本模型是Client/Server模型,也就是兩個進程之間進行相互通信,其中服務端提供位置信息(綁定的IP地址和監聽端口),客戶端通過連接操作向服務端監聽的地址發起連接請求,通過三次握手建立連接,如果連接建立成功,雙方就可以通過網絡套接字(Socket)進行通信。
  在基於傳統同步阻塞模型開發中,ServerSocket負責綁定IP地址,啓動監聽端口,Socket負責發起連接操作,連接成功之後,雙方通過輸入和輸出流進行同步阻塞式通信。
  BIO通信模型的服務端,通常由一個獨立的Acceptor線程負責監聽客戶端的連接,它接收到客戶端連接請求之後爲每個客戶端創建一個新的線程進行鏈路處理,處理完成孩子會,通過輸出流返回應答給客戶端,線程銷燬。
  BIO模型最大的問題就是缺乏彈性伸縮能力,當客戶端併發訪問量增加後,服務端的線程個數和客戶端併發訪問數呈1:1的正比關係,由於線程是Java虛擬機非常寶貴的系統資源,當線程數膨脹之後,系統的性能將急劇下降,隨着併發訪問量的繼續增大,系統會發生線程堆棧溢出、創建新線程失敗等問題,並最終導致進程宕機或者僵死,不能對外提供服務。
三、NIO開發的難點
  開發NIO服務端,需要能夠處理網絡的閃斷、客戶端的重複接入、客戶端的安全認證、消息的編解碼、半包都寫、失敗緩存、網絡擁塞、異常碼流等情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章