0
点赞
收藏
分享

微信扫一扫

Disruptor底层组件解析

RingBuffer密切相关的两个对象:SequenceBarrier和Sequencer。

SequenceBarrier原理精讲

sequenceBarrier是消费者与RingBuffer之间的桥梁。在Disruptor中,消费者直接访问的是SequenceBarrier,而不是RingBuffer,因此SequenceBarrier能减少RingBuffer上的并发冲突。

假设某一时刻的场景:(1)消费者正在消费第6条数据。(2)消费者此刻能够检测到RingBuffer中最大的下标是10.

此时消费者就会通过SequenceBarrier提供的waitFor()方法进入阻塞状态,给予生产者一定的时间去生产数据。waitFor()的参数是消费者下一个即将读取的数据7,返回值就是此刻可检测的最大下标10.与此同时,生产者会持续向RingBuffer中增加数据,当增加到第10条数据时,就会唤醒消费者结束waitFor()方法,消费者结束阻塞后就会消费第7/8/9/10号数据。

这样一来,当消费者的消费速度大于生产者的生产速度时,消费者就可以通过waitFor()方法给予生产者一定的缓冲数据,从而协调了生产者和消费者的速度问题。

举报

相关推荐

0 条评论