Netty的設(shè)計(jì)架構(gòu)
什么是Netty
上一篇文章?一文讀懂NIO?中,我們介紹了NIO, Java的NIO類庫(kù)與API都相當(dāng)復(fù)雜,想要寫好一個(gè)高質(zhì)量的NIO的程序,你必須精通網(wǎng)絡(luò)編程與多線程的知識(shí)。在這個(gè)背景下Netty誕生了,只要進(jìn)行簡(jiǎn)單的編碼就能開發(fā)出一個(gè)可靠、高性能的NIO程序。
Reactor模式
Reactor模型是一個(gè)事件驅(qū)動(dòng)的模型,也是Netty參照的模型。
Reactor的組成:
1.Reactor
作為一個(gè)合格的資本家,你要懂得壓縮成本。還記得?《3分鐘了解linux網(wǎng)絡(luò)IO模型》里的 多路復(fù)用嗎,因?yàn)橄到y(tǒng)發(fā)不出工資,只留下一個(gè)盯梢的,把其他人畢業(yè)向社會(huì)輸送人才。Reactor模式里面,Reactor就是那個(gè)被留下的幸運(yùn)兒。
2.Handler
就是干雜活的社畜,實(shí)際上的讀、寫操作都是他們?cè)诟伞?/p>
Reactor的3種模式:
1.單線程模式

client發(fā)出請(qǐng)求,Reactor通過acceptor接收請(qǐng)求后,就創(chuàng)建一個(gè)handler去干活。這個(gè)模式很簡(jiǎn)單,但是一個(gè)社畜(handler)的工作能力是有限的,一旦它阻塞住了,Reactor就接不了客了。這也是redis的設(shè)計(jì)模型。
2.多線程模式

公司業(yè)務(wù)規(guī)模擴(kuò)大了,老板覺得只有一個(gè)社畜有點(diǎn)忙不過來,就找了多個(gè)社畜一起干活,這就是多線程模式。這個(gè)階段handler也從單線程這個(gè)創(chuàng)業(yè)初期解放出來了,具體干活的事情就丟給線程池中某個(gè)線程去干,它只要結(jié)果,然后給出反饋。
3.主從Reactor模型

公司規(guī)模再度擴(kuò)大后,Reactor這個(gè)管理者開始忙不過來,他既要去接待客戶(client),又要下發(fā)任務(wù)給社畜(handler)。所以老板又找了個(gè)人來進(jìn)行職能切分,主Reactor用來接待所有來訪的客戶,把需求通過acceptor提給子Reactor。子Reactor開始指揮下面的社畜干活。
這種模式在業(yè)界廣泛應(yīng)用,如Nginx的主從多進(jìn)程模式,Netty的主從多線程模式。
Netty的主從多線程模式
Netty的主從模式就是改造至Reactor的主從多線程模式

Boss Group
它是個(gè)線程池,專門用來接收客戶端的連接請(qǐng)求
Worker Group
它也是個(gè)線程池,專門用來處理網(wǎng)絡(luò)的讀寫操作。