RingBuffer

作者: NazgulSun | 来源:发表于2021-12-07 11:05 被阅读0次

在阅读sofaJraft的代码时候,有一个Disruptor 框架,可以非常高性能的处理produce-consumer 消息据说,disruptor 使用的是 ringbuffer , 相比较 jdk 的 blocking queue,主要做的优化是 锁的方面;

他们在数据结构方面也没有特别大的差异,blocking queue 和 ringbuufer 用的都是 环形数组; 环形数组,在设计上有几个要点:

  • header 记录 read 的位置
  • tail 记录写的位置
  • capacity = maxSize -1, 这样可以区分 full 和empty ;
    环形数组,使用双指针,可以非常方便的读取和添加 元素; 如果不适用环形数组, 我们通常要么损失空间,要么损失时间。

比如只用一个数组:
1, 我们可以读取 header,然后header--; 那么 head -》 tail 的空间无法利用,浪费空间;
2, 我们可以读取header之后,把元素整体移动向前,给 tail 留出空间,那么移动就要消耗时间;

所以环形数组是空间和时间很优秀的 queue;

相关文章

网友评论

    本文标题:RingBuffer

    本文链接:https://www.haomeiwen.com/subject/uvioxrtx.html