任务执行者EventLoop
NioEventLoop 繼承自SingleThreadEventLoop,而SingleThreadEventLoop 又繼承自SingleThreadEventExecutor。而SingleThreadEventExecutor 是Netty 中對本地線程的抽象,它內部有一個Thread thread 屬性,存儲了一個本地Java線程。因此我們可以簡單地認為,一個NioEventLoop 其實就是和一個特定的線程綁定,并且在其生命周期內,綁定的線程都不會再改
NioEventLoop 的類層次結構圖還是有些復雜的,不過我們只需要關注幾個重要點即可。首先來看NioEventLoop 的繼承鏈:NioEventLoop->SingleThreadEventLoop->SingleThreadEventExecutor->AbstractScheduledEventExecutor。在AbstractScheduledEventExecutor 中, Netty 實現了NioEventLoop 的schedule 功能,即我們可以通過調用一個NioEventLoop 實例的schedule 方法來運行一些定時任務。而在SingleThreadEventLoop 中,又實現了任務隊列的功能,通過它,我們可以調用一個NioEventLoop 實例的execute()方法來向任務隊列中添加一個task,并由NioEventLoop進行調度執行。
通常來說,NioEventLoop 負責執行兩個任務:第一個任務是作為IO 線程,執行與Channel 相關的IO 操作,包括調用Selector 等待就緒的IO 事件、讀寫數據與數據的處理等;而第二個任務是作為任務隊列,執行taskQueue 中的任務,例如用戶調用eventLoop.schedule 提交的定時任務也是這個線程執行的。
?
總結
以上是生活随笔為你收集整理的任务执行者EventLoop的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EventLoopGroup 的实例化
- 下一篇: NioEventLoop 的实例化过程