Disruptor核心(二) RingBuffer

本文深入探讨了Disruptor框架的核心原理,详细介绍了RingBuffer的数据结构及其在生产者与消费者模型中的作用,同时分析了生产者与消费者之间的平衡机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Disruptor核心原理

  • 初看Disruptor,给人的印象RingBuffer是其核心,生产者向RingBuffer写元素,消费者从RingBuffer消费元素;

组件com.lmax.disruptor.dsl.Disruptor定义

  • 可以理解成辅助类,用于启停,和消费者建立连接,里面包含了RingBuffer,消费者线程池Executor,消费者集合ConsumerRepository等引用;

RingBuffer到底是什么?

  • 它是一个环,一个首尾相接的环;
  • 它作为在不同上下文(线程)间传递数据的buffer;
  • RingBuffer拥有一个序号,这个序号指向数组中下一个可用元素,即其底层数据结构是一个数组;

RingBuffer定义

  • 基于数组的缓存实现,也是创建sequencer与定义WaitStrategy的入口,sequencer理解成序号,WaitStrategy理解成策略;

生产者和消费者之间的平衡

  • RingBuffer是个数组,生产者往里丢元素,消费者从里面消费元素;
  • 生产和消费的速度可能不一样
    • 如果消费者的速度快,数组中没有可消费的元素了,消费者会停下来,生产者向数组中丢了新元素,消费者才会继续消费;
    • 生产者丢到数组末尾的时候,会从数组的开始位置继续丢,如果生产者速度快,追上了消费者,即生产者要丢的位置上,之前的元素还没有被消费,生产者就要等待消费者消费了该元素再继续丢;

RingBuffer底层数据结构

  • 要找到数组中当前序号指向的元素,可以通过取模,sequence % array.length,比如数组长度10,sequence=12,12%10=2,2就是生产者下一个插入位置;
  • 如果RingBuffer的长度是2^n,更有利于基于二进制的计算机进行计算;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值