NIO 學習

 

 

 

好比 socket 通訊,  服務的的 socket 對應的 線程會一直等待 client 端的 消息。數組

這就是bio的 阻塞 。並且在高併發下 很容易出現問題。網絡

 

 

 

1, 非阻塞式IO模型、併發

2. 彈性伸縮能力強(服務的的接收客戶端一個線程便可搞定,和客戶端的關係式  1 對 多 )socket

3, 單線程節省資源高併發

 

 

 

 

 

 

 

Buffer 屬性線程

 

至關於一個 byte 類型的數組3d

1,  capacity  容量blog

標明 數組能夠容納多少字節。事件

一旦 超過 最大容量,就要 清空才能夠 寫入數據ci

2. position  位置

當寫數字時,表示當前的位置。初始爲0 .

當一個byte 寫入 buffer 後, position 向後移 到 下一個可寫入數據的buffer 單元,

最大可爲  容量 -1 ,即 最大值的位置 。

當讀數據時, buffer 可從 寫模式切換到 讀模式 ,此時 position 會被重置爲 0 .

當從buffer 讀取數據時, position 會想後移動到 下一個可讀的位置 

 

3. limit  上限

寫模式下, 表示最多能夠往buffer 寫多少數據 。

此模式下 limit = position  。

讀模式下, limit 表示最大能夠讀多少數據。limit = 寫模式下的 position  。

4.  mark 標記

mark 存入 position的 一個特定位置,以後能夠經過調用 buffer 的 reset 方法 。

能夠恢復到這個 position 位置 。依然能夠從這個位置開始 處理數據

 

 

 

 

 

 

經過 selector 就能夠 管理 多個 socket鏈接。

selector 可以檢測 1到多個 NIO通道 ,而且知道 通道是否準備好,好比 讀寫 事件的中介 

一個線程就能夠管理多個 channl  ,管理多個網絡鏈接 

 

selectionKey 

1. 四種就緒狀態常量 :鏈接就噓。讀就緒。寫就緒 。接收就緒

2.  有價值的屬性好比 selector.selectedKeys() 經過這個獲取其餘信息

 

 

 

 

 

以上來自慕課網

相關文章
相關標籤/搜索