BIO:同步阻塞式IO,服務(wù)器實(shí)現(xiàn)模式為一個(gè)連接一個(gè)線程,即客戶端有連接請(qǐng)求時(shí)服務(wù)器端就需要啟動(dòng)一個(gè)線程進(jìn)行處理,如果這個(gè)連接不做任何事情會(huì)造成不必要的線程開,每個(gè)線程都會(huì)有自己的棧內(nèi)存,會(huì)導(dǎo)致內(nèi)存過大,stackmemryflow,增大cpu線程切換壓力。
NIO:同步非阻塞式IO,服務(wù)器實(shí)現(xiàn)模式為一個(gè)請(qǐng)求一個(gè)線程,即客戶端發(fā)送的連接請(qǐng)求都會(huì)注冊(cè)到多路復(fù)用器上,多路復(fù)用器輪詢到連接有I/O請(qǐng)求時(shí)才啟動(dòng)一個(gè)線程進(jìn)行處理。
具體可類比場(chǎng)景為:
BIO:一家餐館,每來一個(gè)客人就專門指派一個(gè)服務(wù)員為其服務(wù),這樣雖然服務(wù)質(zhì)量好了,但是服務(wù)員過多,餐廳都擠不下去了,stackmemeryflow,每個(gè)客人除了點(diǎn)菜,買單需要服務(wù)外,其他用餐時(shí)間大部分不需要服務(wù),資源浪費(fèi),服務(wù)員過多,調(diào)度難度大。
NIO:餐館新增一個(gè)前臺(tái)(selector)服務(wù)員,餐桌(selectorkey)安裝一個(gè)鈴,前臺(tái)安裝一個(gè)傳呼反應(yīng)器(reactor),客人來人,前臺(tái)負(fù)責(zé)登記,客人需要服務(wù),按鈴講需求,前臺(tái)登記,所有需求服務(wù)由前臺(tái)調(diào)度,10個(gè)服務(wù)員(線程池),有需求了就叫服務(wù)員去服務(wù),服務(wù)完回到前臺(tái)待命!
類比到netty:
1.chinel 相當(dāng)于客戶,前臺(tái)相當(dāng)于server端的boss,反應(yīng)器相當(dāng)于work,放映器上面有對(duì)應(yīng)的每個(gè)桌號(hào)的接收器,客人來了,boss接收,安排到具體桌位上,并且登記注冊(cè)到反應(yīng)器上面(EventLoopGroup),反應(yīng)器上面的桌號(hào)燈接收器啟動(dòng)(EnentLoop),chinel通過按鈴這個(gè)通道(chinelpiple)進(jìn)行輸入呼叫自己的需求,發(fā)出聲音,前臺(tái)(selector)記錄下來,安排服務(wù)員去服務(wù)(ServerChinnel)?