Netty-0x00-NioEventLoopGroup

1 NioEventLoopGroup类图关系

Netty中NioEventLoopGroup组件和NioEventLoop组件比较重要,二者关系像是皮毛关系:

  • NioEventLoopGroup是皮
  • NioEventLoop是毛

从上面的类图可以看出来,NioEventLoopGroup和NioEventLoop追根溯源都派生自EventLoopGroup。

  • NioEventLoopGroup充当的角色更多的是对NioEventLoop的管理,NioEventLoopGroup负责对外。
  • NioEventLoop充当的角色是任务执行。
  • 甚至二者的继承关系可以粗略理解为EventLoop是特殊的EventLoopGroup。

因此,梳理组件实现的时候,切入口最好选择NioEventLoopGroup,在此之前先宏观理解一下NioEventLoop的设计。

2 NioEventLoop抽象设计

3 期待了解的机制和实现

  • NioEventLoopGroup和NioEventLoop的父子组合关系是怎么编排的

  • 很明显NioEventLoopGroup具备任务管理能力和调度能力

    • 普通任务存放在哪儿
    • 定时任务存放在哪儿
    • IO读写(特指Socket编程)的主动权肯定在OS的多路复用器上,怎么转移对IO任务的控制权的
  • 同上,NioEventLoop是具体的执行者

    • 普通任务怎么执行
    • 定时任务怎么执行
    • IO任务怎么执行
  • NioEventLoop是单线程的模型,但是它的继承关系图上没有Thread,那么跟线程就不是派生关系,那就只剩组合关系了,怎么组合线程的

  • NioEventLoop的线程模型是怎样的

  • 用Netty都是进行网络编程的,既然这样,为什么作者设计的NioEventLoop是从Executor->EventLoop->NioEventLoop,为什么不是直接定义一个NioEventLoop,也就是说为什么NioEventLoop的实现要关注跟IO没关系的任务

    • 普通任务
    • 定时任务
  • NioEventLoopGroup派生自EventLoopGroup,也就是从EventLoopGroup开始,整个组件体系跟Channel开始扯上关系,那么存在多个NioEventLoopGroup时,是怎么实现类似于dispatch的功能的

  • 继续上面问题,自然而然出现了Reactor模型,那么Netty的Reactor网络模型具体是怎么样


Netty-0x00-NioEventLoopGroup
https://bannirui.github.io/2023/05/06/Netty-0x00-NioEventLoopGroup/
作者
dingrui
发布于
2023年5月6日
许可协议