NIO 的前生今世 笔记

1. NIO简介

  • 姓名    Non-Blocking I/O 或 New IO
  • 出生    JDK1.4
  • 职务  高并发网络服务器支持

 

2. 编程模型

  • 模型 对事物共性的抽象
  • 编程模型 对编程共性的抽象

 

3. BIO网络模型

  1. 服务端建立监听 "连接请求"
  2. 客户端发起建立 "连接请求"
  3. 服务端启动新的线程
  4. 线程响应给客户端
  5. 线程等待客户端的再次请求

 

4. BIO的缺点

  • 阻塞式I/O模型
  • 弹性收缩能力差 一个客户端对应一个服务端线程
  • 非常耗费资源

 

5. NIO网络编程模型

NIO 的前生今世 笔记

  1. 服务端 Selector 注册建立 连接事件
  2. 客户端发送建立连接请求
  3. Selector 启动建立连接事件处理器
  4. AcceptorHandler 创建与客户端的连接
  5. AcceptorHandler 响应客户端的连接请求
  6. AccpetorHandler 注册连接可读事件
  7. 客户端发送请求
  8. Selector 启动连接读写处理器
  9. Read&Write Handler处理客户端的读写请求
  10. Read&Write Handler响应客户端的读写请求
  11. 注册连接可读事件

 

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%