Disruptor核心概念
- RingBuffer:基於數組的緩存實現,也是建立sequencer與定義WaitStrategy的入口
- Disruptor:持有RingBuffer、消費者線程池Executor、消費者集合ConsumerRepository等引用
- Sequence:
- 經過順序遞增的序號來編號,管理進行交換的數據(事件)
- 對數據(事件)的處理過程老是沿着序號逐個遞增處理
- 一個Sequence用於跟蹤標識某個特定的事件處理着(RingBuffer、Producer、Consumer)的處理進度
- 能夠當作是一個AtomicLong用於標識進度
- 防止不一樣Sequence之間cpu緩存僞共享(Flase Sharing)的問題
- 真正Disruptor核心
- 有兩個實現:SingleProducerSequencer、MultiProducerSequencer
- 主要實現生產者和消費者之間快速、正確地傳遞數據的併發算法
- 用於保持對RingBuffer的Main Published Sequence(Producer)和Consumer之間的平衡關係;
- 還定義了決定Consumer是否還有可處理的事件的邏輯
- 決定一個消費者將如何等待生產者將Event置入Disruptor
- 主要策略:BlockingWaitStategy、SleepingWaitStategy、YieldingWaitStategy
- BlockingWaitStategy:最低效,對cpu消耗最小而且在各類部署中提供更加一致的性能表現
- SleepingWaitStategy:性能表現跟BlockingWaitStategy差很少,對cpu消耗相似,但對生產者線程影響最小,適合用於異步日誌相似場景
- YieldingWaitStategy:的性能最好的,適合用於低延遲的系統。在要求極高性能且事件處理線束小於cpu邏輯核心數的場景中,推薦使用此策略,如cpu開啓超線程的特性(推薦)
- 從生產者到消費者過程當中所處理的數據單元
- Disruptor中沒有代碼表示Event,由於它徹底是由用戶自定義的
- 主要事件循環,處理Disruptor中的Event,擁有消費者的Sequence
- 他有一個實現類,BatchEventProcessor,包含event loop有效實現,而且將回調到一個EventHandler接口的實現對象
- EventHandler:由用戶實現而且表明Disruptor中的一個消費者的接口,也是咱們消費者邏輯都毒液寫在這裏
- WorkProcessor:確保每一個Sequence只被一個processor消費,在同一個WorkPool中處理多個WorkProcessor不會浪費一樣的Sequence。
Disruptor圖解算法
歡迎關注本站公眾號,獲取更多信息