Netty的EventLoop组件

uml diagram

主要功能

  1. 注册和移除 Channel 的读、写事件
  2. 轮询出感兴趣的 IO 事件
  3. 将 IO 事件分发给 ChannelHandler 进行处理
Tip

一个 EventLoop 在它的生命周期内只和一个 Thread 绑定,这样可以保证 ChannelHandler 的处理逻辑在同一个 Thread 中执行。

原理

  1. EventLoop 包含一个事件循环,它会不断进行事件轮询,看是否有感兴趣的 IO 事件发生。
  2. EventLoop 包含一个 [基础知识/操作系统/线程|线程],这个 线程 执行所有的 IO 事件和事件处理逻辑。一个 EventLoop 绑定一个 线程,这样可以保证一个 Channel 的 IO 事件和业务逻辑处理始终在同一个 线程 中执行。
  3. EventLoop 中维护一个 Selector(NIO 实现) 或者 EpollSelector(Epoll 实现),用于轮询 IO 事件。当有感兴趣的 IO 事件发生时,会将对应的 Channel 返回。
  4. EventLoop 中维护一个 Channel 集合,这些 Channel 都绑定到该 EventLoop 上,EventLoop 负责处理这些 Channel 上的 IO 事件。
  5. 当 EventLoop 的 Selector/EpollSelector 轮询出有 IO 事件发生的 Channel 时,会将这个 Channel 和对应的 IO 事件 (CONNECT、READ、WRITE 等) 分发给 ChannelPipeline 进行处理。
  6. 事件处理完成后,如果 Channel 还对某些 IO 事件感兴趣,则会将 Channel 再次注册到 Selector/EpollSelector 上。