Netty线程模型架构!

Netty 主要基于 主从 Reactors 多线程模型 做了一定的改进:

  • 其中主从 Reactor 多线程模型有多个 Reactor。

Netty 抽象出两组线程池:BossGroup 和 WorkerGroup

BossGroup 专门负责接收客户端的连接。

WorkerGroup 专门负责网络的读写。

BossGroup 和 WorkerGroup 类型都是 NioEventLoopGroup

NioEventLoopGroup 相当于一个 事件循环组。

  • 这个组中 含有多个事件循环 ,每一个事件循环是 NioEventLoop。

NioEventLoop 表示一个不断循环的执行处理任务的线程。

  • 每个NioEventLoop 都有一个selector,用于监听绑定在其上的socket的网络通讯。

NioEventLoopGroup 可以有多个线程,即可以含有多个NioEventLoop。

每个Boss Group 中的 NioEventLoop 循环执行的步骤:

轮询accept 事件。

处理accept 事件,与client建立连接,生成 NioScocketChannel。

  • 并将其注册 Worker Group 上的某个 NIOEventLoop 上的 selector。

  • 处理任务队列的任务,即 runAllTasks。

每个 Worker Group 中的 NIOEventLoop 循环执行的步骤:

  • 轮询 read/write 事件。

  • 处理 I/O 事件,即 read/write 事件,在对应的 NioScocketChannel 上处理。

  • 处理任务队列的任务,即 runAllTasks。

每个Worker NIOEventLoop 处理业务时,会使用 pipeline(管道)。

  • pipline中包含了 channel,即通过pipline可以获取到对应的 channel。
    • 并且pipline维护了很多的 handler(处理器)来对数据进行一系列的处理。

handler(处理器) 有Netty内置的,也可以自己定义。

在这里插入图片描述