Netty是什麼,Netty為什麼速度這麼快,執行緒模型分析

2022-05-29 09:00:20

哈嘍!大家好,我是小奇,一位熱愛分享的程式設計師
小奇打算以輕鬆幽默的對話方式來分享一些技術,如果你覺得通過小奇的文章學到了東西,那就給小奇一個贊吧
文章持續更新

一、前言

書接上回,現在下著大雨看來是去不了鎮上買熟食吃了,但是在家待著也沒有意思,去找我表弟玩吧,看看他在家幹啥呢?

表弟家離我家很近,走一條街再拐幾個彎就到了,大中午的應該在家剛做完飯,正好蹭飯。

正要推開門發現門裡面鎖著呢,這大白天的鎖著門幹啥呢,敲了敲門。

我:有人在家嗎?

表弟:誰呀?

我:我,你哥。

表弟:哦,那沒有人在家,你回吧!

我:趕緊給我開門,別墨跡。

我說怎麼這小子不開門,躲家裡啃雞腿呢,就怕我飯點來。

表弟:哥你咋來了?

我:咋?我還不能來啊!

表弟:你不是去北京找工作去了嗎,怎麼這麼快就回來了。

我:別提了,現在工作不好找。

表弟:那不行你就回來跟我一起養豬吧,我老是出去賣豬肉,家裡豬下崽了我也不能及時發現,你在家就能給我看著了。

我:現在哪裡還用人看著豬圈啊,都是攝像頭了。

表弟:啥是攝像頭呢,去哪裡找呢?

我:走,我帶你去村裡看看牆上剛打的廣告。

表弟:說的真對,我現在就買一個。

我:你買吧,我回家做飯去了,你這就一個雞腿還讓你啃成這樣子了,我走了。

回到家中做一個大米湯吧,炒一個蒜薹雞蛋,正炒著菜呢電話響了。

我:「喂您好」。

對面:「您好,請問是小奇嗎」。

我:「是我,你是?」。

對面:「我是XXX公司的,我看到hr推給我你的簡歷,我感覺還不錯,你什麼時候方便來現場面試一下」。

我:「現在不方便現場面試了」。

對面:「好吧,那你現在方便嗎?我們現線上上面試一下吧」。

我:「好的」。

二、面試

面試官:我看你簡歷上寫的精通Netty,那你能簡單說一下Netty是什麼嗎?

我:Netty首先是一個java開源框架,他是一個提供了非同步的、基於事件驅動的網路應用程式框架,所以說Netty就是一個網路應用框架,可以開發出高效能、高可靠的網路伺服器和使用者端程式。

面試官:嗯。那Netty為什麼能夠開發出高效能、高可靠的網路伺服器呢,他為什麼速度這麼快呢?

我:這得益於Netty的執行緒模型的架構設計,使得Netty可以基於NIO的設計理念對執行緒模型基於改進,使得Netty在處理使用者端請求連線,和使用者端請求資料處理的時候可以快速的進行處理。

面試官:嗯。你能跟我分析一下Netty的執行緒模型嗎?

我:Netty模型中首先有這些屬性概念。

BossGroup:相當於一個事件迴圈執行緒池,這個池中有多個事件迴圈執行緒。這個執行緒池是專門處理使用者端的連線事件的。

WorkerGroup:也是一個事件迴圈執行緒池,這個執行緒池是專門處理使用者端的讀寫請求事件的。

NioEventLoop:這個就是事件迴圈執行緒,每一個事件迴圈執行緒都有一個selector用來監聽事件。

NioSocketChannel:這個是在使用者端與BossGroup中的一個事件迴圈執行緒建立連線後生成的,將這個可以註冊到WorkerGroup的一個事件迴圈執行緒上,讓WorkerGroup的事件執行緒來處理後續的讀寫請求。

Pipeline:這個處理從WorkerGroup過來的資料,他包含很多ChannelHandler,這些是真正處理資料的。

ChannelHandler:真正用來處理資料的。

面試官:嗯。可以講一下從使用者端連線到傳送資料的整個流程嗎?

1、使用者端向BossGroup發起連線請求,BossGroup中的NioEventLoop處理了連線請求後生成一個NioSocketChannel。

2、BossGroup將NioSocketChannel註冊到WorkerGroup中的一個NioEventLoop中的一個Selector上。至此BossGroup的工作完成,他接著處理其他使用者端的連線請求。

3、WorkerGroup迴圈監聽註冊在自己的Selector上的這些NioSocketChannel有沒有讀寫的事件發生。

4、WorkerGroup監聽到NioSocketChannel有讀寫事件發生就交給Pipeline處理。至此WorkerGroup工作完成,他繼續處理其他使用者端的讀寫事件。

5、Pipeline接收到WorkerGroup傳送過來的資料,然後交給ChannelHandler進行處理。

面試官:嗯。那Netty為什麼比傳統的網路程式設計工具更加快呢?

我:因為Netty將使用者端的連線請求和讀寫資料的請求分開用兩個執行緒池來處理,這樣大大提高了效率。

面試官:「小夥子不錯呀,什麼時候能回北京入職呢」

我:「額。。。等等吧,現在家裡雨太大了,容易弄一身巧克力。」

面試官:「行,那你來了北京一定來我們公司上班啊」

我:「額。。。這個跟你承諾不了,萬一還有別的好公司給我打電話呢」。

面試官:「來吧,條件好商量」

我:「我考慮考慮吧」。

三、總結

這裡的相關內容還沒有整理完畢,文章後面持續更新,建議收藏。

文章中涉及到的命令大家一定要像我一樣每個都敲幾遍,只有在敲的過程中才能發現自己對命令是否真正的掌握了。

如果覺得我的文章還不錯的話就點個贊吧