- RingBuffer:基于数组的缓存实现,也是创建sequencer与定义WaitStrategy的入口
- Disruptor:持有RingBuffer、消费者线程池Executor、消费者集合ConsumerRepository等引用
- Sequence:
- 通过顺序递增的序号来编号,管理进行交换的数据(事件)
- 对数据(事件)的处理过程总是沿着序号逐个递增处理
- 一个Sequence用于跟踪标识某个特定的事件处理着(RingBuffer、Producer、Consumer)的处理进度
- 可以看成是一个AtomicLong用于标识进度
- 防止不同Sequence之间cpu缓存伪共享(Flase Sharing)的问题
- Sequencer:
- 真正Disruptor核心
- 有两个实现:SingleProducerSequencer、MultiProducerSequencer
- 主要实现生产者和消费者之间快速、正确地传递数据的并发算法
- Sequence Barrier
- 用于保持对RingBuffer的Main Published Sequence(Producer)和Consumer之间的平衡关系;
- 还定义了决定Consumer是否还有可处理的事件的逻辑
- WaitStrategy
- 决定一个消费者将如何等待生产者将Event置入Disruptor
- 主要策略:BlockingWaitStategy、SleepingWaitStategy、YieldingWaitStategy
- BlockingWaitStategy:最低效,对cpu消耗最小并且在各种部署中提供更加一致的性能表现
- SleepingWaitStategy:性能表现跟BlockingWaitStategy差不多,对cpu消耗类似,但对生产者线程影响最小,适合用于异步日志类似场景
- YieldingWaitStategy:的性能最好的,适合用于低延迟的系统。在要求极高性能且事件处理线束小于cpu逻辑核心数的场景中,推荐使用此策略,如cpu开启超线程的特性(推荐)
- Event:
- 从生产者到消费者过程中所处理的数据单元
- Disruptor中没有代码表示Event,因为它完全是由用户自定义的
- EventProcessor:
- 主要事件循环,处理Disruptor中的Event,拥有消费者的Sequence
- 他有一个实现类,BatchEventProcessor,包含event loop有效实现,并且将回调到一个EventHandler接口的实现对象
- EventHandler:由用户实现并且代表Disruptor中的一个消费者的接口,也是我们消费者逻辑都毒液写在这里
- WorkProcessor:确保每个Sequence只被一个processor消费,在同一个WorkPool中处理多个WorkProcessor不会浪费同样的Sequence。
Disruptor图解