Netty--Netty模型

Netty模型

工作原理示意图:(简单版)

Netty 主要基于主从 Reactors 多线程模型(如图)做了一定的改进,其中主从 Reactor 多线程模型有多个 Reactor

在这里插入图片描述

  1. BossGroup 线程维护 Selector , 只关注 Accecpt
  2. 当接收到Accept事件,获取到对应的SocketChannel,封装成NIOScoketChannel并注册到Worker线程(事件循
    环), 并进行维护
  3. 当Worker线程监听到selector中通道发生自己感兴趣的事件后,就进行处理(就由handler),注意handler已
    经加入到通道

工作原理示意图:(进阶版)

在这里插入图片描述

工作原理示意图:(详细版)

在这里插入图片描述

  1. Netty 抽象出两组线程池 BossGroup 专门负责接收客户端的连接, WorkerGroup 专门负责网络的读写

  2. BossGroup 和 WorkerGroup 类型都是 NioEventLoopGroup

  3. NioEventLoopGroup 相当于一个事件循环组, 这个组中含有多个事件循环 ,每一个事件循环是 NioEventLoop

  4. NioEventLoop 表示一个不断循环的执行处理任务的线程, 每个 NioEventLoop 都有一个 selector , 用于监听绑
    定在其上的 socket 的网络通讯

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

  6. 每个BossNioEventLoop循环执行的步骤有3步

    • 轮询 accept 事件
    • 处理 accept 事件 , 与 client 建立连接 , 生成 NioScocketChannel , 并将其注册到某个 worker NIOEventLoop 上的 selector
    • 处理任务队列的任务 , 即 runAllTasks
  7. 每个 Worker NIOEventLoop 循环执行的步骤

    • 轮询 read, write 事件
    • 处理 i/o 事件, 即 read , write 事件,在对应 NioScocketChannel 处理
    • 处理任务队列的任务 , 即 runAllTasks
  8. 每个Worker NIOEventLoop 处理业务时,会使用pipeline(管道), pipeline 中包含了 channel , 即通过pipeline 可以获取到对应通道, 管道中维护了很多的 处理器

发布了766 篇原创文章 · 获赞 2129 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/cold___play/article/details/104341647