使用到的类

Java NIO (non-blocking I/O): 同步非阻塞

NIO 新增了 Channel、Selector、Buffer 等抽象概念,支持面向缓冲、基于通道的 I/O 操作方法。

  • Selector:可以理解为选择器; 多路复用器 。
  • Channel:可以理解为通道(双向); 状态是否处于 连接就绪、接受就绪、可读就绪、可写就绪。
    • 文件类 FileChannel
    • UDP类 DatagrameChannel
    • TCP类 ServerSocketChannel 和 SocketChannel
  • Buffer:读取 channel 中数据的一块内存
    • 容量 Capacity
    • 位置 Position
    • 上限 Limit
    • 标记 Mark

NIO 提供了与传统 BIO 模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现。


  • 缓冲区 buffer
  • 通道 channel 双向
  • 多路复用器 Selector

Netty

1. 基础

Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。
它提供了对TCP、UDP 和文件传输的支持
作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。

2. 应用场景

高性能领域
并发场景
异步通信领域
产品:dubbo

2.1 原生NIO缺陷

类库 API复杂
入门门槛高(多线程,网络编程)

Channel

image.png

Buffer

image.png
image.png
image.png
image.png
image.png
image.png
image.png

Selector

image.png

image.png
image.png
image.png