IO與NIO網路程式設計模型

2021-08-18 21:42:30 字數 1301 閱讀 7638

一、bio(bolcking io)阻塞分析

阻塞點:

1.建立服務埠

serversocket serversocket=new serversocket(12345);

//獲取socket套接字

socket socket=serversocket.accept();//阻塞等待客戶端連線

2.獲取客戶端輸入流

inputstream is=scoket.getinputstream();

byte b=new byte[1024];

while(true)else{

break;

bio特點:再沒有對服務端優化的前提下,1個服務端只能為乙個客戶端服務(bio的通訊線程模型)

二、多執行緒io

客戶端數:執行緒數=n:n(1:1)

三、偽非同步io

executorservice threadpool=executors.newcachedthreadpool();

特點:不限制執行緒數量

客戶端數:執行緒數=n:n

executorservice threadpool=executor.newfixedthreadpool(100);

特點:限制執行緒數量,執行緒可以復用

客戶端資料量:執行緒數量=n:m(n>=m)

四、nio(non-blocking io)

new io

non blocking io(非阻塞同步io)

jdk1.7以後,出現aio(真正意義上的非同步非阻塞io)

non-blocking重要概念:

1、selector(通道的管理器)

2、serversocketchannel(關心accept事件)--->serversocket(io)

3、socketchannel(關心io事件read|write|read write)--->socket(io)

4、selectionkey(事件集合)

reactor/多執行緒

單執行緒reactor問題

多路復用io通過輪詢的方式檢查是否有事件到來,然後對到來的事件逐一進行響應,如果此時響應提一旦很大,會導致後續的時間得不到處理,最終導致新的事件輪詢延後

解決方案:netty(基於nio實現,多執行緒reactor模型,主從多執行緒reactor模型)

NIO網路模型

nio基於reactor,當socket有流可讀或可寫入socket時,作業系統會相應的通知引用程式進行處理,應用再將流讀取到緩衝區或寫入作業系統。也就是說,這個時候,已經不是乙個連線就要對應乙個處理執行緒了,而是有效的請求,對應乙個執行緒,當連線沒有資料時,是沒有工作執行緒來處理的。bio與nio...

《網路程式設計》I O 模型

在分析 i o 模型之前,首先了解 同步 i o 和 非同步 i o 的基本概念 同步 i o 程序呼叫 i o 操作函式時,在 i o 操作函式返回之前,該程序會被掛起 即阻塞 直到 i o 操作完成後返回 非同步 i o 程序呼叫 i o 操作函式時,在 i o 操作函式返回之前,該程序不會被掛...

NIO網路程式設計

nio buffer陣列緩衝區 獲取物件 allocate int capacity allocatedirect int capacity wrap byte byte 常用方法 put 新增元素 capacity 容量 陣列的大小 position 位置 要存放元素位置,每操作乙個元素,位置就會...