- Netty源碼剖析與應用
- 劉耀林
- 446字
- 2021-01-05 18:23:47
2.2 Netty線程模型
從本節開始了解Netty的特性,首先從線程模型開始。在第1章中,講到過兩個線程組,即Boss線程組和Worker線程組。其中,Boss線程組一般只開啟一條線程,除非一個Netty服務同時監聽多個端口。Worker線程數默認是CPU核數的兩倍,Boss線程主要監聽SocketChannel的OP_ACCEPT事件和客戶端的連接(主線程)。
當Boss線程監聽到有SocketChannel連接接入時,會把SocketChannel包裝成NioSocketChannel,并注冊到Worker線程的Selector中,同時監聽其OP_WRITE和OP_READ事件。當Worker線程監聽到某個SocketChannel有就緒的讀I/O事件時,會進行以下操作。
(1)向內存池中分配內存,讀取I/O數據流。
(2)將讀取后的ByteBuf傳遞給解碼器Handler進行解碼,若能解碼出完整的請求數據包,就會把請求數據包交給業務邏輯處理Handler。
(3)經過業務邏輯處理Handler后,在返回響應結果前,交給編碼器進行數據加工。
(4)最終寫到緩存區,并由I/O Worker線程將緩存區的數據輸出到網絡中并傳輸給客戶端。
Netty主從線程模型如圖2-3所示,圖中有個任務隊列,這個任務隊列主要是用來處理一些定時任務的,如連接的心跳檢測。同時,當開啟了額外業務線程時,寫回響應結果也會被封裝成任務,交給I/O Worker線程來完成。

圖2-3 Netty主從線程模型
推薦閱讀
- UNIX編程藝術
- Web程序設計及應用
- 零基礎搭建量化投資系統:以Python為工具
- Mastering RabbitMQ
- Cocos2d-x游戲開發:手把手教你Lua語言的編程方法
- C語言從入門到精通(第4版)
- Python高效開發實戰:Django、Tornado、Flask、Twisted(第2版)
- Bootstrap Essentials
- H5頁面設計:Mugeda版(微課版)
- SQL基礎教程(第2版)
- 深入分布式緩存:從原理到實踐
- 基于Struts、Hibernate、Spring架構的Web應用開發
- Scratch趣味編程:陪孩子像搭積木一樣學編程
- INSTANT Silverlight 5 Animation
- Python入門很輕松(微課超值版)