好比 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() 經過這個獲取其餘信息
以上來自慕課網