- 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开启超线程的特性(推荐)
来源:https://my.oschina.net/u/3915790/blog/3112362