泉州網(wǎng)站建設(shè)公司首選網(wǎng)站綜合查詢工具
傳統(tǒng)IO模型:
傳統(tǒng)IO模型就是阻塞IO,即處理業(yè)務(wù)邏輯的線程去進行IO,當(dāng)然IO操作很耗時,然后線程就得阻塞,當(dāng)然CPU會回收該線程的時間片,把該線程掛起,切換到其他線程去執(zhí)行,在并發(fā)量大的場景中,會造成大量的線程切換,而每一次線程切換都會消耗一定的資源,造成性能低下。
Netty是什么:
Netty是一個基于Java NIO(非阻塞IO)的異步事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用框架,它提供了高性能、可擴展和易于使用的網(wǎng)絡(luò)編程接口。
Netty做了件什么事情呢,就是把業(yè)務(wù)邏輯線程從IO操作中解放出來了,它內(nèi)部搞了線程池,這個線程池里面的線程專門負責(zé)去做IO,但是對外表現(xiàn)出來,業(yè)務(wù)邏輯線程只要過來就立刻可以拿到它想要的內(nèi)容而不需要去做IO操作了。
Netty的網(wǎng)絡(luò)模型基于Reactor模式。首先來看看什么是Reactor模式。
Reactor模式:
Reactor模式是一種基于事件驅(qū)動的設(shè)計模式,用于處理并發(fā)I/O操作。它的核心思想是將I/O操作和事件處理解耦,使得程序能夠高效地處理多個并發(fā)的I/O請求。
Reactor模式由以下幾個關(guān)鍵組件組成:
-
Reactor:Reactor是事件分發(fā)器,負責(zé)接收并分發(fā)事件,一般只用一個線程足矣。它會監(jiān)聽各種事件,如連接請求、數(shù)據(jù)到達等,并將事件分發(fā)給對應(yīng)事件處理器進行處理。
-
Handlers:Handlers是事件處理器,負責(zé)實際處理事件,也就是實際去執(zhí)行IO操作的線程,一般會弄一個線程池。當(dāng)Reactor將事件分發(fā)給Handlers時,Handlers會執(zhí)行相應(yīng)的操作,如讀取數(shù)據(jù)、寫入數(shù)據(jù)等。
-
Event:Event是發(fā)生的事件,如連接建立、數(shù)據(jù)到達等。它會被封裝成事件對象,傳遞給Reactor進行分發(fā)。
-
Event Loop:Event Loop是一個事件循環(huán)器,一般也是一個線程足矣。在Event Loop中,這個事件循環(huán)線程會不斷地監(jiān)聽事件,并將事件分發(fā)給對應(yīng)的事件處理器進行處理。
Reactor模式的工作流程如下:
-
Reactor監(jiān)聽Event,并等待Event的到達。
-
當(dāng)Event到達時,Reactor將Event封裝成事件對象。
-
Reactor將事件對象分發(fā)給對應(yīng)的Handlers。
-
Handlers執(zhí)行相應(yīng)的IO操作,如讀取數(shù)據(jù)、寫入數(shù)據(jù)等。
-
處理完事件后,Handlers將控制權(quán)交還給Reactor。
Reactor模式的出現(xiàn)就是為了解決線程處理I/O時的阻塞和頻繁線程切換所帶來的性能問題。通過避免線程的阻塞和頻繁的線程切換,Reactor模式能夠有效地提高程序的性能。相比于傳統(tǒng)的線程模型,它可以處理更多的并發(fā)連接,提高了系統(tǒng)的吞吐量和響應(yīng)性能。
總結(jié)起來,Reactor模式是一種基于事件驅(qū)動的設(shè)計模式,通過解耦I(lǐng)/O操作和事件處理,使程序能夠高效地處理多個并發(fā)的I/O請求。它由Reactor、Handlers、Event和Event Loop等組件構(gòu)成,通過事件分發(fā)和處理來實現(xiàn)并發(fā)處理。
Netty網(wǎng)絡(luò)通信模型:
下面是Netty的網(wǎng)絡(luò)通訊模型概述:
-
Boss線程池:Boss線程池負責(zé)接受客戶端的連接請求,并將連接注冊到Worker線程池中的某個線程上進行處理。通常情況下,Boss線程池只有一個線程。Boss線程大致對應(yīng)了Reactor模式中的Reactor。
-
Worker線程池:Worker線程池負責(zé)處理實際的網(wǎng)絡(luò)I/O操作,包括讀取、寫入和處理請求等。Worker線程池中可以有多個線程,每個線程都會被分配一個或多個連接進行處理。Worker線程池對應(yīng)了Reactor模式中的Handlers。
-
Channel、EventLoop和ChannelPipeline:Netty中的核心概念是Channel、EventLoop和ChannelPipeline。一個Channel代表一個實際的網(wǎng)絡(luò)連接,EventLoop是一個處理事件的循環(huán),而ChannelPipeline則是一個處理事件的管道。EventLoop對應(yīng)了Reactor模式中的EventLoop。
-
事件驅(qū)動模型:Netty的網(wǎng)絡(luò)模型是基于事件驅(qū)動的,當(dāng)有事件發(fā)生時(如連接建立、數(shù)據(jù)到達等),Netty會將事件封裝成事件對象并派發(fā)給對應(yīng)的事件處理器進行處理。事件處理器可以是用戶自定義的處理器,也可以是Netty提供的預(yù)定義處理器。
-
異步和非阻塞:Netty采用異步和非阻塞的方式進行網(wǎng)絡(luò)操作,這意味著它可以同時處理多個連接,并且不會因為某個連接的慢速操作而阻塞其他連接的處理。
總的來說,Netty的網(wǎng)絡(luò)模型基于Reactor模式,通過Boss線程池接受連接請求并將連接注冊到Worker線程池中的某個線程上進行IO處理。Netty采用異步和非阻塞的方式進行網(wǎng)絡(luò)操作,通過事件驅(qū)動模型和ChannelPipeline來處理網(wǎng)絡(luò)事件。這種模型使得Netty在高性能、可擴展和易于使用方面具有優(yōu)勢,并廣泛應(yīng)用于構(gòu)建高性能的網(wǎng)絡(luò)應(yīng)用程序。