Netty的基礎架構模型

Netty是高性能的異步非阻塞NIO框架!

下面先來理解一下兩組關鍵的概念。

同步和異步

拿方法調用來說,同步是指調用一個方法能夠在方法結束時立即得到方法的結果,異步就是方法調用時沒有返回結果,由另外的線程去做方法中的事情,當前線程可以去做其他的事情。異步調用的結果會通過中間狀態改變或者回調函數等來通知。

拿一個生活的例子來說,同步就好比你去小區附近的一個4S點修車,老闆在幫你修車,你一直在旁邊等老闆修好位置,可能是等1個小時,也有可能是等2天;而異步就好比你去修車,老闆說修好了給你打電話來取車,你會可以回家等了,老闆通過電話的形式來通知到你。

阻塞和非阻塞

用一個隊列來說,當你需要從隊列中獲取一個元素,如果當前隊列爲空,那麼線程會一直在當前方法處於等待,線程會掛起。非阻塞則不會掛起!側重點在於線程是否會掛起。


基礎架構模型

在這個基礎架構模型中,創建了兩個線程池,這兩個線程池分別是boss線程池和worker線程池。在網絡中,我們知道,一個連接過來,先要建立連接,然後再發送和接收信息。服務器開啓時,boss線程池負責註冊ServerSocketChannel到當前selector,事件爲OP_ACCEPT連接事件,專門負責客戶端請求的接收連接工作。boss線程池對於連接進來的SocketChannel,會交給worker線程池處理,worker線程池會將這個註冊SocketChannel到selector,事件爲OP_READ事件,專門處理消息的讀取工作。

一般情況下,boss線程池中線程數量較少,worker線程池中線程數量較多。


我們可以把這樣一個基礎框架模型比喻成飯店吃飯,一般來說,客戶去飯店吃飯,飯店有門口處的服務員接待客戶到飯桌上,把點餐、倒水、上菜等工作交給大廳服務員。門口服務員接待了客戶到飯桌上,就繼續回到門口接待下一個要來吃飯的客戶。而大廳服務員不可能是每一桌分配一個服務員,因爲這樣比較浪費,而且並不是時時刻刻每一桌都會有事情叫服務員幫忙,所以一個大廳服務員可以服務多個飯桌的客戶,只要客戶叫到,服務員就來幫忙。這裏類似於selector的作用。


發佈了40 篇原創文章 · 獲贊 47 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章