高性能的异步处理框架Disruptor(二)——Disruptor对RingBuffer的读写策略

本文详细介绍了Disruptor框架中RingBuffer的读取和写入策略,包括消费者如何通过ConsumerBarrier等待和更新序号,以及生产者如何进行批处理和两阶段提交。Disruptor通过避免锁和队列,实现了高效率的并发处理,并允许多个消费者无锁读取。同时,文章探讨了多生产者场景下的序号管理和提交策略,确保了数据的正确顺序和一致性。
摘要由CSDN通过智能技术生成

前文了解了Disruptor与RingBuffer的基础知识后,接下来了解Disruptor对 ringbuffer的访问控制策略。

Disruptor对RingBuffer的读取策略

假设消费者(Consumer)是一个想从 Ring Buffer 里读取数据的线程,它可以访问 ConsumerBarrier对象——这个 对象由 RingBuffer 创建并且代表消费者与 RingBuffer 进行交互。就像 RingBuffer显然需要一个序号才能找到 下一个可用节点一样,消费者也需要知道它将要处理的序号——每个消费者都需要找到下一个它要访问的序 号。例如:消费者处理完了 RingBuffer 里序号8之前(包括 8)的所有数据,那么它期待访问的下一 个序号是 9。

消费者可以调用 ConsumerBarrier 对象的 waitFor() 方法,传递它所需要的下一个序号.

int nextSequence = 9;
final long availableSeq = consumerBarrier.waitFor(nextSequence);
//如果availableSeq为12,则表示节点 9,10,11 和 12 都已写入,消费者可以去处理

ConsumerBarrier 返回 RingBuffer 的最大可访问序号。ConsumerBarrier 有一个 WaitStrategy 方法来决定它如何等待这个序号(即waitFor方法无法返回时如何阻塞)。

WaitStrategy.Option.BLOCKING;
WaitStrategy.Option.YIELDING;
WaitStrategy.Option.BUSY_SPIN;

如上代码所示,当序号9还没有被生产者写入时,消费者会一直

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值