Fork me on GitHub

一分钟看清Netty的工作流程

前言

之前摸清了 Reactor 线程模型及其演变,最近看了下相关文章和代码,也熟悉了netty的工作模型,记录之。

netty工作模型

netty模型.jpeg

  • Netty 抽象出两组线程池:BossGroup、WorkerGroup。 BossGroup专门负责接受客户端的连接,相当于 mainReactor;WorkerGroup专门负责网络的读写,相当于subReactor。
  • BossGroup、WorkerGroup 类型都是 NioEventLoopGroup.
  • NioEventLoopGroup 即事件循环组,里面含有多个事件循环(NioEventLoop),即 一个 NioEventLoopGroup 对应多个 NioEventLoop
  • NioEventLoop 表示一个不断循环的执行处理任务的线程,每个 NioEventLoop 都有一个 selector ,用于监听绑定在其上的 socket 的网络通信。
  • 每个 boss 的 NioEventLoopGroup 循环执行的步骤:
    1. 轮询 accept 事件
    2. 处理 accept 事件,与 client 建立连接,生产 NioSocketChannel,并将其注册到某个 woker 的 NioEventLoop 上的 selector
    3. 处理任务队列,即 runAllTasks
  • 每个 worker 的 NioEventLoopGroup 循环执行的步骤:

    1. 轮询 read,write 事件
    2. 处理I/O事件,即 read,write 事件,在对应的 NioSocketChannel 处理。
    3. 处理任务队列,即 runAllTasks
  • 每个 worker 的 NioEventLoopGroup 处理业务时,会使用 ChannelPipeline ,即通道。ChannelPipeline 中包含了 channel , ChannelPipeline 中也有各种处理器(编码、解码、业务处理…)

后记

之后准备用netty写一个IM项目练练手,代码会比较简单,非常适合熟悉netty。

-------------本文结束,感谢您的阅读-------------
贵在坚持,如果您觉得本文还不错,不妨打赏一下~
0%