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张图片

  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%

 

 

你可能感兴趣的:(Java)