NioEventLoopGroup 的結(jié)構(gòu)圖
- NioEventLoopGroup 是 NioEventLoop 的集合,其持有一個裝著 NioEventLoop 的數(shù)組
- 每個 NioEventLoop 里面有一個 selector 和一個 taskQueue
- selector: 負(fù)責(zé)監(jiān)聽事件
- taskQueue: 用來保存異步任務(wù)
- exector: 單線程線程池沽翔,用來異步執(zhí)行 NioEventLoop的 run() 方法
- NioEventLoop 在初始化之后會從 executor 里啟動一個線程執(zhí)行自身的 run() 方法兢孝,該方法執(zhí)行邏輯
- selector.select(): 返回監(jiān)聽事件
- processSelectedKeys(): 處理 selector 返回的事件
- runAllTasks(): 處理異步隊列的任務(wù)
BossGroup
- 監(jiān)聽 Accept 事件
- 當(dāng) accept 事件返回后,調(diào)用 ServerSocketChannle.pipeline() 中注冊的 ChannelHandler仅偎,在 pipeline 中有一個處理接受請求的 ChannelHandler 跨蟹, 即 ServerBootstrapAcceptor,執(zhí)行該 ChannelHandler 的 channelRead() 方法將事件攜帶的 socketChannel 封裝成 NioSocketChannel橘沥,并注冊到 workerGroup 中的 NioEventLoop 下的 Selector 中
WorkerGroup
- 監(jiān)聽 Connect/Read 事件
- 當(dāng) connect / read 事件返回后窗轩,調(diào)用 SocketChannel.pipeline() 中注冊的 ChannelHandler,這些 ChannelHandler 既是 ServerBootstrap.childHandler() 注冊的 ChannelHandler