一、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 位置 要存放元素位置,每操作乙個元素,位置就會...