1. 程式人生 > >Netty 源碼(五)NioEventLoop

Netty 源碼(五)NioEventLoop

abs 生命周期 exe 事件驅動 thread 抽象 LEDE sch 線程

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 實現了自己的自定義線程池。


每天用心記錄一點點。內容也許不重要,但習慣很重要!

Netty 源碼(五)NioEventLoop