如果在Google上搜索"Netty 高性能 易用",在找到的壹大批文章,妳大概率會看到這張圖,外加關鍵字
NIO , Reactor多線程模型 , 異步串行無鎖化 , 堆外內存 , pipeline ,翻看完這些文章後可以讓妳對Netty的原理有大致了解,但是Netty如何實現這些的呢? 本文將盡可能簡單的解釋Netty中Reactor多線程的實現,如有錯誤感謝指出.
Selector是NIO的重要組件, Selector上可以註冊Channel. Channel在註冊的時候會標註自己感興趣的事件:
Channel,通道,為了便於理解,我把它分為 三類
Reactor多線程模型可以分為三塊
mainReactor負責客戶端接入
acceptor負責將接入的連接移交給subReactor
subReactor負責連接的讀寫
關鍵知識:
運行流程圖
關鍵知識:
ChannelPipeline的設計思想是 責任鏈設計模式 ,是由ChannelHandlerContext組成的 雙向鏈表 , ,首尾固定為 HeadContext 和 TailContext ,它們作為哨兵存在.當我們添加壹個ChannelHandler到ChannelPipeline時,會先 包裝成ChannelHandlerContext 再添加進去.
inbound事件傳播
客戶端向服務端發送消息,這個流向就稱為inbound. 消息會從Head開始由左向右傳遞直到Tail,由Tail進行收尾操作
outbound事件傳播
服務端向客戶端發送信息,這個流向稱為outbound,消息會從Tail開始由右向左傳遞知道Head,由Head進行收尾操作
異常傳遞
當某個ChannelHandler操作拋出異常,會從該handler開始向Tail傳遞.由Tail做收尾操作.
學習Netty,要理解Reactor模型,並把它和Netty的實現結合起來, 我學習Netty的時候就因為這塊認識不深刻,浪費了很多時間也沒有成效,***勉
/p/a9b2fec31fd1
/p/a9d030fec081
/p/2461535c38f3
https://juejin.im/post/5a126b146fb9a0450c490201