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() 经过这个获取其余信息

 

 

 

 

 

以上来自慕课网

相关文章
相关标签/搜索