NIO 的前生今世 笔记
1. NIO简介
- 姓名 Non-Blocking I/O 或 New IO
- 出生 JDK1.4
- 职务 高并发网络服务器支持
2. 编程模型
- 模型 对事物共性的抽象
- 编程模型 对编程共性的抽象
3. BIO网络模型
- 服务端建立监听 "连接请求"
- 客户端发起建立 "连接请求"
- 服务端启动新的线程
- 线程响应给客户端
- 线程等待客户端的再次请求
4. BIO的缺点
- 阻塞式I/O模型
- 弹性收缩能力差 一个客户端对应一个服务端线程
- 非常耗费资源
5. NIO网络编程模型
- 服务端 Selector 注册建立 连接事件
- 客户端发送建立连接请求
- Selector 启动建立连接事件处理器
- AcceptorHandler 创建与客户端的连接
- AcceptorHandler 响应客户端的连接请求
- AccpetorHandler 注册连接可读事件
- 客户端发送请求
- Selector 启动连接读写处理器
- Read&Write Handler处理客户端的读写请求
- Read&Write Handler响应客户端的读写请求
- 注册连接可读事件
6. NIO模型优化
- 非阻塞I/O模型
- 弹性伸缩能力加强 一个线程就可以处理所有请求 1:N
- 单线程节省资源
7. NIO 核心
- channel 通道
- Buffer 缓冲区
- Selector 选择器或多路复用器
8. Channal
- 双向性 即可读 又可写
- 非阻塞
- 操作唯一性 只能通过buffer操作
具体实现
- 文件类 FileChannel
- UDP类 DatagramChannal
- TCP类 ServerSocketChannal / SocketChannal
9. Buffer
- 作用 读写channel中的数据
- 本质 一块内存区域
Buffer属性
- capacity 容量
- position 位置
- limit 上限
- mark 标记
10. NIO的缺点
- 类库和API复杂 麻烦 !
- 可靠力不足 工作量和难度大 !
- Selector空轮训 导致CPU100%