1. BIO网络模型
缺点:
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简介
参考
- Thrift(Java版)到网络编程(三)—异步和NIO