生活随笔
收集整理的這篇文章主要介紹了
netty模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
netty 多線程IO模型
文章目錄
- netty 多線程IO模型
- netty介紹
- 主從 Reactor 多線程模式
- netty多線程IO模型
netty介紹
netty IO模型是基于Java NIO 的一個封裝,在Java NIO的基礎上加上主從 Reactor 多線程模式的設計思想 誕生出來的高并發基于事件驅動的網絡應用框架。
Netty 主要用于開發基于 TCP 協議的網絡 IO 程序。Netty 是基于 Java NIO 構建出來的,Java NIO 又是基于 Linux 提供的高性能 IO 接口/系統調用構建出來的。
主從 Reactor 多線程模式
netty模型是基于主從 Reactor 多線程模式演變過來的,可以說是對主從 Reactor 多線程模式進行的再封裝。其實有幾種Reactor 線程模式 ,由于主從 Reactor 多線程模式最接近netty模型架構,并且也是幾種Reactor 線程模式中最優化策略。所以這里介紹主從 Reactor 多線程模式。
模型圖如下:(來源網絡)
Reactor 主線程 MainReactor 對象通過 select 監聽客戶端連接事件,收到事件后,通過 Acceptor 處理客戶端連接事件。當 Acceptor 處理完客戶端連接事件之后(與客戶端建立好 Socket 連接),MainReactor 將連接分配給 SubReactor。(即:MainReactor 只負責監聽客戶端連接請求,和客戶端建立連接之后將連接交由 SubReactor 監聽后面的 IO 事件。)SubReactor 將連接加入到自己的連接隊列進行監聽,并創建 Handler 對各種事件進行處理。當連接上有新事件發生的時候,SubReactor 就會調用對應的 Handler 處理。Handler 通過 read 從連接上讀取請求數據,將請求數據分發給 Worker 線程池進行業務處理。Worker 線程池會分配獨立線程來完成真正的業務處理,并將處理結果返回給 Handler。Handler 通過 send 向客戶端發送響應數據。一個 MainReactor 可以對應多個 SubReactor,即一個 MainReactor 線程可以對應多個 SubReactor 線程。
netty多線程IO模型
netty多線程IO模型圖:
Netty 抽象出兩組線程池:BossGroup 和 WorkerGroup,也可以叫做 BossNioEventLoopGroup 和 WorkerNioEventLoopGroup。每個線程池中都有 NioEventLoop 線程。BossGroup 中的線程專門負責和客戶端建立連接,WorkerGroup 中的線程專門負責處理連接上的讀寫。BossGroup 和 WorkerGroup 的類型都是 NioEventLoopGroup。NioEventLoopGroup 相當于一個事件循環組,這個組中含有多個事件循環,每個事件循環就是一個 NioEventLoop。NioEventLoop 表示一個不斷循環的執行事件處理的線程,每個 NioEventLoop 都包含一個 Selector,用于監聽注冊在其上的 Socket 網絡連接(Channel)。NioEventLoopGroup 可以含有多個線程,即可以含有多個 NioEventLoop。每個 BossNioEventLoop 中循環執行以下三個步驟:++++ - select:輪訓注冊在其上的 ServerSocketChannel 的 accept 事件(OP_ACCEPT 事件)
- processSelectedKeys:處理 accept 事件,與客戶端建立連接,生成一個 NioSocketChannel,并將其注冊到某個 WorkerNioEventLoop 上的 Selector 上
- runAllTasks:再去以此循環處理任務隊列中的其他任務
每個 WorkerNioEventLoop 中循環執行以下三個步驟:+++++++ - select:輪訓注冊在其上的 NioSocketChannel 的 read/write 事件(OP_READ/OP_WRITE 事件)
- processSelectedKeys:在對應的 NioSocketChannel 上處理 read/write 事件
- runAllTasks:再去以此循環處理任務隊列中的其他任務
在以上兩個processSelectedKeys步驟中,會使用 Pipeline(管道),Pipeline 中引用了 Channel,即通過 Pipeline 可以獲取到對應的 Channel,Pipeline 中維護了很多的處理器(攔截處理器、過濾處理器、自定義處理器等)。這里暫時不詳細展開講解 Pipeline。
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的netty模型的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。