netty原始碼解解析(4.0)-5 執行緒模型-EventExecutorGroup框架
- EventExecutor管理: 建立, 結束SingleThreadEventExecutor,EventExecutor的資料是固定的,由傳入的引數決定。
- 任務派發策略: 實現了EventExecutor選擇器,next方法使選擇器選中一個Executor。
相關推薦
netty原始碼解解析(4.0)-5 執行緒模型-EventExecutorGroup框架
上一章講了EventExecutorGroup的整體結構和原理,這一章我們來探究一下它的具體實現。 EventExecutorGroup和EventExecutor介面 io.netty.util.concurrent.EventExecutorGroup j
netty原始碼解解析(4.0)-6 執行緒模型-IO執行緒EventLoopGroup和NIO實現(一)
介面定義 io.netty.channel.EventLoopGroup extends EventExecutorGroup 方法 說明
netty原始碼解解析(4.0)-7 執行緒模型-IO執行緒EventLoopGroup和NIO實現(二)
把NIO事件轉換成對channel unsafe的呼叫或NioTask的呼叫 processSelectedKeys()方法是處理NIO事件的入口: private void processSelectedKeys() { if (selectedKeys != null) {
netty原始碼解解析(4.0)-18 ChannelHandler: codec--編解碼框架
編解碼框架和一些常用的實現位於io.netty.handler.codec包中。 編解碼框架包含兩部分:Byte流和特定型別資料之間的編解碼,也叫序列化和反序列化。不型別資料之間的轉換。 下圖是編解碼框架的類繼承體系: 其中MessageToByteEncoder和ByteToMessage
netty原始碼解解析(4.0)-1 核心架構
netty是java開源社群的一個優秀的網路框架。使用netty,我們可以迅速地開發出穩定,高效能,安全的,擴充套件性良好的伺服器應用程式。netty封裝簡化了在伺服器開發領域的一些有挑戰性的問題:jdk nio的使用;多執行緒併發;擴充套件性。它還提供了多種應用層協議的支援:http/https/web
netty原始碼解解析(4.0)-3 Channel的抽象實現
AbstractChannel和AbstractUnsafe抽象類 io.netty.channel.AbstractChannel 從本章開始,會有大量的篇幅涉及到程式碼分析。為了能夠清晰簡潔的地說明程式碼的結構和功能,我會用程式碼註釋+獨立段落的方式加以呈現。 所以,為你能更好地理解程
netty原始碼解解析(4.0)-8 ChannelPipeline的設計
io.netty.channel.ChannelPipeline 設計原理 上圖中,為了更直觀地展示事件處理順序, 故意有規律地放置兩種handler的順序,實際上ChannelInboundHandler和ChanneOutbo
netty原始碼解解析(4.0)-10 ChannelPipleline的預設實現--事件傳遞及處理 netty原始碼解解析(4.0)-2 Chanel的介面設計 netty原始碼解解析(4.0)-8 ChannelPipeline的設計
事件觸發、傳遞、處理是DefaultChannelPipleline實現的另一個核心能力。在前面在章節中粗略地講過了事件的處理流程,本章將會詳細地分析其中的所有關鍵細節。這些關鍵點包括: 事件觸發介面和對應的ChannelHandler處理方法。 inbound事件的傳遞。 outbou
netty原始碼解解析(4.0)-17 ChannelHandler: IdleStateHandler實現
io.netty.handler.timeout.IdleStateHandler功能是監測Channel上read, write或者這兩者的空閒狀態。當Channel超過了指定的空閒時間時,這個Handler會觸發一個IdleStateEvent事件。 在第一次檢測到Channel變成a
netty原始碼解解析(4.0)-19 ChannelHandler: codec--常用編解碼實現
資料包編解碼過程中主要的工作就是:在編碼過程中進行序列化,在解碼過程中從Byte流中分離出資料包然後反序列化。在MessageToByteEncoder中,已經解決了序列化之後的問題,ByteToMessageDecoder中已經部分第解決了從Byte流中分離出資料包的問題。實現具體的資料包編解碼,只需要
netty原始碼解解析(4.0)-20 ChannelHandler: 自己實現一個自定義協議的伺服器和客戶端
本章不會直接分析Netty原始碼,而是通過使用Netty的能力實現一個自定義協議的伺服器和客戶端。通過這樣的實踐,可以更深刻地理解Netty的相關程式碼,同時可以瞭解,在設計實現自定義協議的過程中需要解決的一些關鍵問題。 本週章涉及到的程式碼可以從github上下載: https://git
netty原始碼解解析(4.0)-22 ByteBuf的I/O
ByteBuf的I/O主要解決的問題有兩個: 管理readerIndex和writerIndex。這個在在AbstractByteBuf中解決。 從記憶體中讀寫資料。ByteBuf的不同實現主要使用兩種記憶體:堆記憶體表示為byte[];直接內,可能是Dire
netty原始碼解解析(4.0)-23 ByteBuf記憶體管理:分配和釋放
ByteBuf記憶體分配和釋放由具體實現負責,抽象型別只定義的記憶體分配和釋放的時機。 記憶體分配分兩個階段: 第一階段,初始化時分配記憶體。第二階段: 記憶體不夠用時分配新的記憶體。ByteBuf抽象層沒有定義第一階段的行為,但定義了第二階段的方法: public abstract
netty原始碼解解析(4.0)-24 ByteBuf基於記憶體池的記憶體管理
io.netty.buffer.PooledByteBuf<T>使用記憶體池中的一塊記憶體作為自己的資料記憶體,這個塊記憶體是PoolChunk<T>的一部分。PooledByteBuf<T>是一個抽象型別,它有4個派生類: PooledHeapByteBuf,&nbs
netty原始碼解解析(4.0)-25 ByteBuf記憶體池:PoolArena-PoolChunk
PoolArena實現了用於高效分配和釋放記憶體,並儘可能減少記憶體碎片的記憶體池,這個記憶體管理實現使用PageRun/PoolSubpage演算法。分析程式碼之前,先熟悉一些重要的概念: page: 頁,一個頁是可分配的最小的記憶體塊單元,頁的大小:pageSize = 1 << n (
netty源碼解解析(4.0)-1 核心架構
coder style out ava 默認 mage 網絡框架 分享圖片 輸入 netty是java開源社區的一個優秀的網絡框架。使用netty,我們可以迅速地開發出穩定,高性能,安全的,擴展性良好的服務器應用程序。netty封裝簡化了在服務器開發領域的一些有挑戰性的問題
netty源碼解解析(4.0)-8 ChannelPipeline的設計
rst 分配 active ace 時間 rev remove 設置 bject io.netty.channel.ChannelPipeline 設計原理 上圖中,為了更直觀地展示事件處理順序, 故意有規律地放置兩種handler的順序,實際上Chann
netty源碼解解析(4.0)-14 Channel NIO實現:讀取數據
isa index 消息 soc 發現 接收數據 boolean 是的 cte 本章分析Nio Channel的數據讀取功能的實現。 Channel讀取數據需要Channel和ChannelHandler配合使用,netty設計數據讀取功能包括三個要素:Chan
EventBus原始碼分析(四):執行緒模型分析(2.4版本)
EventBus有四種執行緒模型 PostThread模式不需執行緒切換,直接在釋出者執行緒進行事件處理。 MainThread模式分類討論:釋出者執行緒是主執行緒則直接呼叫事件處理方法,否則通過Handler進行執行緒切換,切換到主執行緒處理事件,該模
android 4.0 主執行緒訪問網路異常
android出現如下異常資訊,是因為4.0以上不允許在主執行緒中訪問網路。 1.可以再Activity的onCreate()方法中加入這樣一段程式碼,如下: if (Build.VERSION.SDK_INT >= 11) {StrictMode.s