BIO:同步阻塞式IO洗出,服務(wù)器實現(xiàn)模式為一個連接一個線程广辰,即客戶端有連接請求時服務(wù)器端就需要啟動一個線程進行處理查邢,如果這個連接不做任何事情會造成不必要的線程開,每個線程都會有自己的棧內(nèi)存我擂,會導致內(nèi)存過大衬以,stackmemryflow,增大cpu線程切換壓力缓艳。
NIO:同步非阻塞式IO,服務(wù)器實現(xiàn)模式為一個請求一個線程泄鹏,即客戶端發(fā)送的連接請求都會注冊到多路復用器上郎任,多路復用器輪詢到連接有I/O請求時才啟動一個線程進行處理。
具體可類比場景為:
BIO:一家餐館备籽,每來一個客人就專門指派一個服務(wù)員為其服務(wù)舶治,這樣雖然服務(wù)質(zhì)量好了,但是服務(wù)員過多车猬,餐廳都擠不下去了霉猛,stackmemeryflow,每個客人除了點菜,買單需要服務(wù)外珠闰,其他用餐時間大部分不需要服務(wù)惜浅,資源浪費,服務(wù)員過多伏嗜,調(diào)度難度大坛悉。
NIO:餐館新增一個前臺(selector)服務(wù)員,餐桌(selectorkey)安裝一個鈴,前臺安裝一個傳呼反應(yīng)器(reactor)承绸,客人來人裸影,前臺負責登記,客人需要服務(wù)军熏,按鈴講需求轩猩,前臺登記,所有需求服務(wù)由前臺調(diào)度荡澎,10個服務(wù)員(線程池)均践,有需求了就叫服務(wù)員去服務(wù),服務(wù)完回到前臺待命摩幔!
類比到netty:
1.chinel 相當于客戶彤委,前臺相當于server端的boss,反應(yīng)器相當于work,放映器上面有對應(yīng)的每個桌號的接收器,客人來了或衡,boss接收焦影,安排到具體桌位上,并且登記注冊到反應(yīng)器上面(EventLoopGroup)薇宠,反應(yīng)器上面的桌號燈接收器啟動(EnentLoop),chinel通過按鈴這個通道(chinelpiple)進行輸入呼叫自己的需求偷办,發(fā)出聲音艰额,前臺(selector)記錄下來澄港,安排服務(wù)員去服務(wù)(ServerChinnel)?