NIO 学习

2021-03-11 11:31:47 浏览数 (1)

1. BIO网络模型

缺点:
  • 阻塞式I/O模型
  • 弹性伸缩能力差
  • 多线程耗资源

2. NIO网络模型

优点:
  • 非阻塞式I/O -> 一个线程监听
  • 弹性伸缩能力强 -> 一个线程处理所有请求
  • 单线程节省资源
缺点
  • NIO类库和API繁杂
  • 可靠性能力补齐,工作量和难度都非常大
  • Selector空轮询,导致CPU100%
NIO核心
  • Channel: 通道
  • Buffer: 缓冲区
  • Selector: 选择器或多路复用器(检测多个Channel状态,管理多个网络链接)
Channel 简介
  • 双向性
  • 非阻塞性(可以设置)
  • 操作唯一性
Buffer 简介
  • Capacity 容量
  • Position 位置
  • Limit 上限
  • Mark 标记
Buffer API
代码语言:javascript复制
// 初始化长度为10的Buffer
ByteBuffer.allocate(10);
// 写入数据
byteBuffer.put("abc".getBytes());
// 写模式=》读模式
byteBuffer.flip();
// 读取
byteBuffer.get();
// 记录当前Position位置
byteBuffer.mark();
// 重置mark位置
byteBuffer.reset();
// 所有属性重置
byteBuffer.clear();
SelectionKey简介
  • 四种就绪常量
  • 有价值的属性

参考

  1. Thrift(Java版)到网络编程(三)—异步和NIO

0 人点赞