NIO 学习
2021-03-08 本文已影响0人
夹胡碰
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
// 初始化长度为10的Buffer
ByteBuffer.allocate(10);
// 写入数据
byteBuffer.put("abc".getBytes());
// 写模式=》读模式
byteBuffer.flip();
// 读取
byteBuffer.get();
// 记录当前Position位置
byteBuffer.mark();
// 重置mark位置
byteBuffer.reset();
// 所有属性重置
byteBuffer.clear();
SelectionKey简介
- 四种就绪常量
- 有价值的属性