NIO学习
- 姓名 :Non-blocking I/O 或 New I/O
- 出生: JDK 1.4
- 职务: 高并发网络服务器支持岗
NIO网络模型 :
NIO核心 :
- Channel : 通道
- Buffer : 缓冲区
- Selector : 选择器或多路复用器
Channel 简介
- 双向性
- 非阻塞性
- 操作唯一性
Channel 实现
- 文件类 : FileChannel
- UDP类 : DatagramChannel
- TCP类 : ServerSocketChannel / SocketChannel
Buffer 简介
- 作用 : 读写 Channel 中数据
- 本质 : 一块内存区域
Buffer 属性
- Capacity : 容量
- Position : 位置
- Limit : 上限
- Mark : 标记
Buffer 使用
2.
3.
4.
5.
6.
7.
Selector 简介
- 作用 : I/O就绪选择
- 地位 : NIO网络编程的基础
Selector 使用
SelectionKey 使用
- 四种就绪状态常量
- 有价值的属性
NIO编程实现步骤:
- 第一步 : 创建 Selector
- 第二步 : 创建 ServerSocketChannel ,并绑定监听端口
- 第三步 : 将 Channel设置为非阻塞模式
- 第四步 : 将 Channel注册到 Selector上,监听连接事件
- 第五步 : 循环调用 Selector的 select方法,检测就绪情况
- 第六步 : 调用 selectedKeys方法获取就绪 channe|集合
- 第七步 : 判断就绪事件种类,调用业务处理方法
- 第八步 : 根据业务需要决定是否再次注册监听事件,重复执行第三步操作
原生的NIO网络编程缺陷
- 麻烦 : NIO类库和API繁杂
- 心累 : 可靠性能力补齐,工作量和难度都非常大
- 有坑 : Selector空轮询,导致CPU100%