3. Disruptor核心组件

2021-05-24  本文已影响0人  香沙小熊
image.png

1.RingBuffer、Disruptor

RingBuffer: 基于数组的缓存实现,也是创建Sequencer与定义WaitStrategy的入口
Disruptor: 持有RingBuffer、消费者线程池Executor、消费者集合含ConsumerRepository等引用

2.Sequence、Sequencer、Sequence Barrier

2.1 Sequence
2.2 Sequencer
2.2 Sequence Barrier

3.WaitStrategy等待策略

名称 措施 适用场景
BlockingWaitStrategy 加锁 CPU资源紧缺,吞吐量和延迟并不重要的场景
BusySpinWaitStrategy 自旋 通过不断重试,减少切换线程导致的系统调用,而降低延迟。推荐在线程绑定到固定的CPU的场景下使用
PhasedBackoffWaitStrategy 自旋 + yield + 自定义策略 CPU资源紧缺,吞吐量和延迟并不重要的场景
SleepingWaitStrategy 自旋 + yield + sleep 性能和CPU资源之间有很好的折中。延迟不均匀
TimeoutBlockingWaitStrategy 加锁,有超时限制 CPU资源紧缺,吞吐量和延迟并不重要的场景
YieldingWaitStrategy 自旋 + yield + 自旋 性能和CPU资源之间有很好的折中。延迟比较均匀
主要策略有:
  1. BlockingWaitStrategy
  1. SleepingWaitStrategy
  1. YieldingWaitStrategy

4.Event、EventProcessor、EventHandler

4.1 Event

从生产者到消费者过程中所处理的数据单元;
在Disruptor框架中没有类表示Event,因为它完全是由用户定义的,在Disruptor框架中是用泛型表示的;

4.2 EventProcessor

主要用于事件的循环,处理Disruptor中的Event,拥有消费者的Sequence;

4.3 EventHandler

由用户实现并且代表了Disruptor中的一个消费者的接口,也就是消费者逻辑都要写在其中;

5 WorkProcessor

在多生产者多消费者模式下,确保每个sequence只被一个processor消费,在同一个WorkPool中,确保多个WorkProcessor不会消费同样的sequence;

特别感谢:

任性之闲来无事
乌鲁木齐001号程序员

上一篇 下一篇

猜你喜欢

热点阅读