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

曠世奇才927發表於2022-05-29

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

一、前言

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

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

在這裡插入圖片描述

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

我:有人在家嗎?

表弟:誰呀?

我:我,你哥。

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

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

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

在這裡插入圖片描述

表弟:哥你咋來了?

我:咋?我還不能來啊!

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

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

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

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

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

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

在這裡插入圖片描述

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

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

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

我:“喂您好”。

對面:“您好,請問是小奇嗎”。

我:“是我,你是?”。

對面:“我是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將客戶端的連線請求和讀寫資料的請求分開用兩個執行緒池來處理,這樣大大提高了效率。

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

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

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

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

面試官:“來吧,條件好商量”

我:“我考慮考慮吧”。

三、總結

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

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

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

相關文章