Netty 原始碼(五)NioEventLoop
阿新 • • 發佈:2018-12-02
Netty 原始碼(五)NioEventLoop
Netty 基於事件驅動模型,使用不同的事件來通知我們狀態的改變或者操作狀態的改變。它定義了在整個連線的生命週期裡當有事件發生的時候處理的核心抽象。
Channel 為 Netty 網路操作抽象類,EventLoop 主要是為 Channel 處理 I/O 操作,兩者配合參與 I/O 操作。
下圖是 Channel、EventLoop、Thread、EventLoopGroup 之間的關係。
- 一個 EventLoopGroup 包含一個或多個 EventLoop。
- 一個 EventLoop 在它的生命週期內只能與一個 Thread 繫結。
- 所有有 EnventLoop 處理的 I/O 事件都將在它專有的 Thread 上被處理。
- 一個 Channel 在它的生命週期內只能註冊與一個 EventLoop。
- 一個EventLoop 可被分配至一個或多個 Channel 。
當一個連線到達時,Netty 就會註冊一個 Channel,然後從 EventLoopGroup 中分配一個 EventLoop 繫結到這個 Channel 上,在該 Channel 的整個生命週期中都是有這個繫結的 EventLoop 來服務的。
一、NioEventLoop 類圖
其中 Executor、ExecutorService、AbstractExecutorService、ScheduledExecutorService 屬於 JDK 定義的規範,Netty 實現了自己的自定義執行緒池。
每天用心記錄一點點。內容也許不重要,但習慣很重要!