[編織消息框架][netty源碼分析]2 EventLoop

eventLoop從命名上看是專門處理事件併發

事件系統主要由線程池同隊列技術組成,有如下幾個優勢框架

1.任務出隊有序執行,不會出現錯亂,固然前提執行線程池只有一個socket

2.解偶系統複雜度,這是個經典的生產者/消費者模型,生產者只須要生成執行上下文須要的數據,消費者集中實現處理邏輯,無須要關注太多關係層次問題ide

3.可根據業務按單一類型事件獨立分配一套event system ,提升並行處理而又解決一些並行產生的併發問題oop

 

那做爲一個消息框架,處理的事件有那些呢?測試

主要分爲系統事件同用戶事件優化

如消息編解碼、socket io 處理、socket 鏈路創建等爲系統事件spa

應用層同業務邏輯爲用戶事件線程

 

接下分析eventLoop類層次關係設計

public interface EventLoop extends OrderedEventExecutor, EventLoopGroup {
    @Override
    EventLoopGroup parent();
}
public interface EventLoopGroup extends EventExecutorGroup {
}
public interface EventExecutorGroup extends ScheduledExecutorService, Iterable<EventExecutor> {
}

從依賴關係上能夠看出 EventLoop 繼承於 EventLoopGroup,Group就是多個EventLoop 這樣設計目的是爲了重用擴展,但由於太靈活了容易形成混亂

有時分不清楚單個仍是多個呢?解決方式也很簡單,就是經過實現類來區分

EmbeddedEventLoop 是用來測試的

SingleThreadEventLoop 是單線程實現,這其實就是EventLoop的實現類

DefaultEventLoop 是默認配置的SingleThreadEventLoop

NioEventLoop 是針對於nio socket 優化設計的

 

EventLoopGroup命名也是大同小異,從名稱上看設計思路跟NioEventLoop 是一致的

 

EventExecutorGroup繼承於ScheduledExecutorService,直接依賴或擴展jdk的併發庫,好處就不用多講了之後本身造輪子能夠借鑑優秀設計的作法

相關文章
相關標籤/搜索