NioEventLoopGroup 的结构图
NioEventLoopGroup.png- NioEventLoopGroup 是 NioEventLoop 的集合,其持有一个装着 NioEventLoop 的数组
- 每个 NioEventLoop 里面有一个 selector 和一个 taskQueue
- selector: 负责监听事件
- taskQueue: 用来保存异步任务
- exector: 单线程线程池,用来异步执行 NioEventLoop的 run() 方法
- NioEventLoop 在初始化之后会从 executor 里启动一个线程执行自身的 run() 方法,该方法执行逻辑
- selector.select(): 返回监听事件
- processSelectedKeys(): 处理 selector 返回的事件
- runAllTasks(): 处理异步队列的任务
BossGroup
- 监听 Accept 事件
- 当 accept 事件返回后,调用 ServerSocketChannle.pipeline() 中注册的 ChannelHandler,在 pipeline 中有一个处理接受请求的 ChannelHandler , 即 ServerBootstrapAcceptor,执行该 ChannelHandler 的 channelRead() 方法将事件携带的 socketChannel 封装成 NioSocketChannel,并注册到 workerGroup 中的 NioEventLoop 下的 Selector 中
WorkerGroup
- 监听 Connect/Read 事件
- 当 connect / read 事件返回后,调用 SocketChannel.pipeline() 中注册的 ChannelHandler,这些 ChannelHandler 既是 ServerBootstrap.childHandler() 注册的 ChannelHandler
网友评论