Disruptor核心(三) Sequence Sequencer SequenceBarrier

com.lmax.disruptor.Sequence

  • 通过顺序递增的序号来编号,管理进行交换的数据(事件);
  • 对数据(事件)的处理过程总是沿着序号逐个递增处理;
  • 一个Sequence用于跟踪标识某个特定的事件处理者(RingBuffer/Producer/Consumer)的处理进度,Producer有自己的Sequence,Consumer也有自己的Sequence,如果Producer和Consumer有多个,每个Producer和Consumer都有自己的Sequence;
  • Sequence可以看成是一个AtomicLong,用于标识进度,只不过其比AtomicLong更强大;
  • Sequence还有另外一个目的是防止不同Sequence之间CPU缓存伪共享(False Sharing)的问题,Sequence胖着呢,会把缓存行沾满的,所以不会有伪共享的问题;

com.lmax.disruptor.Sequencer

  • Sequencer表示一个对象,其包含了Sequence;
  • Sequencer是Disruptor真正的核心;
  • 此接口有两个重要实现类
    • com.lmax.disruptor.SingleProducerSequencer;
    • com.lmax.disruptor.MultiProducerSequencer;
  • 主要实现生产者和消费者之间快速、正确地传递数据的并发算法;

com.lmax.disruptor.SequenceBarrier

  • 充当了Producer和Consumer之间的平衡的角色,或者说定义了Consumer要如何等着;
  • SequenceBarrier还定义了决定Consumer是否还有可处理的事件的逻辑;

你可能感兴趣的:(Disruptor核心(三) Sequence Sequencer SequenceBarrier)