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的併發庫,好處就不用多講了之後本身造輪子能夠借鑑優秀設計的作法