Disruptor核心概念

两盒软妹~` 提交于 2019-11-30 16:45:06
  • RingBuffer:基于数组的缓存实现,也是创建sequencer与定义WaitStrategy的入口
  • Disruptor:持有RingBuffer、消费者线程池Executor、消费者集合ConsumerRepository等引用
  • Sequence:
  1. 通过顺序递增的序号来编号,管理进行交换的数据(事件)
  2. 对数据(事件)的处理过程总是沿着序号逐个递增处理
  3. 一个Sequence用于跟踪标识某个特定的事件处理着(RingBuffer、Producer、Consumer)的处理进度
  4. 可以看成是一个AtomicLong用于标识进度
  5. 防止不同Sequence之间cpu缓存伪共享(Flase Sharing)的问题
  • Sequencer:
  1. 真正Disruptor核心
  2. 有两个实现:SingleProducerSequencer、MultiProducerSequencer
  3. 主要实现生产者和消费者之间快速、正确地传递数据的并发算法
  • Sequence Barrier
  1. 用于保持对RingBuffer的Main Published Sequence(Producer)和Consumer之间的平衡关系;
  2. 还定义了决定Consumer是否还有可处理的事件的逻辑
  • WaitStrategy
  1. 决定一个消费者将如何等待生产者将Event置入Disruptor
  2. 主要策略:BlockingWaitStategy、SleepingWaitStategy、YieldingWaitStategy
  3. BlockingWaitStategy:最低效,对cpu消耗最小并且在各种部署中提供更加一致的性能表现
  4. SleepingWaitStategy:性能表现跟BlockingWaitStategy差不多,对cpu消耗类似,但对生产者线程影响最小,适合用于异步日志类似场景
  5. YieldingWaitStategy:的性能最好的,适合用于低延迟的系统。在要求极高性能且事件处理线束小于cpu逻辑核心数的场景中,推荐使用此策略,如cpu开启超线程的特性(推荐
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!