Netty源碼閱讀(序)

參加的阿里中間件性能挑戰(zhàn)賽用到了Netty,就決定利用這個機(jī)會,讀一讀Netty的源碼。首先,我認(rèn)為閱讀源碼大致有2個主要目的,1.了解Netty的內(nèi)部機(jī)制,更好的使用Netty;2.學(xué)習(xí)Netty的實現(xiàn),比如池化的ByteBuf、以及EventLoop的責(zé)任鏈模式,我認(rèn)為都有很多值得借鑒,可以用在工作中的技巧和思想;3.可以看一看比較復(fù)雜的框架代碼的組織結(jié)構(gòu)、代碼風(fēng)格,并做一些思考??。

閱讀源碼之前,首先要有一個大局觀,就是Netty解決了什么問題,有什么優(yōu)點(diǎn),主要有哪些模塊組成?

另外,我認(rèn)為帶著問題去閱讀,才能夠帶來更多的收獲。所以,我想在這次閱讀源碼的過程中,能夠回答以下這些問題:

1. Netty有哪些主要組成部分?

? ? Channel、ChannelPipeline、ChannelHandler、Eventloop、ChannelFuture、Bootstrap等。

2. Netty如何對Java NIO進(jìn)行的封裝?

? ? Netty的Channel借助門面模式,(1)封裝了和網(wǎng)絡(luò)相關(guān)的操作,提供了統(tǒng)一的視圖(對于ServerSocketChannel和SocketChannel),其底層IO操作是由UnSafe接口實現(xiàn)的,而Channel的骨骼類AbstractChannel只是調(diào)用了ChannelPipeline的相應(yīng)方法讓事件在責(zé)任鏈上傳遞依次處理,ChannelPipeline上的HeadContext調(diào)用UnSafe的方法執(zhí)行實際的IO操作;(2)封裝了對Channel接口的配置參數(shù)操作(3)維護(hù)了Channel的狀態(tài)(readable,writable,open,active等)(4)Channel接口還聚合了ChannelPipeline接口,而ChannelPipeline用于處理所有的IO事件。

3.?Netty如何利用無鎖化做到的高性能?

4. netty如何監(jiān)控內(nèi)存泄漏?

5. netty如何實現(xiàn)的buffer池?

6. netty在代碼設(shè)計方面值得學(xué)習(xí)的地方?

最后,給出一些我初次閱讀較大項目源碼的一些思考:

1. 先了解整體框架,再去找感興趣的部分去讀;

2.帶著問題去讀;

3.閱讀Netty源碼是一個學(xué)習(xí)并發(fā)編程,網(wǎng)絡(luò)編程極好的方式。


Netty中的設(shè)計模式:

????觀察者模式:Future,Listener

? ? 責(zé)任鏈模式:ChannelPipeline

? ? 門面模式:Channel統(tǒng)一封裝了網(wǎng)絡(luò)操作。

? ? 適配器模式:ChannelInboundHandlerAdapter

????裝飾器模式:SimpleLeakAwareByteBuf

io.netty.util.concurrent.SingleThreadEventExecutor#wakeup ?什么作用?

Netty中的死鎖問題?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容