好比 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() 经过这个获取其余信息
以上来自慕课网