in FP

RingBuffer in scala

是什么?

ring_bufferRingBuffer (环形缓冲区),是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流(用来实现轮转功能的日志也很合适)。

它亦是一个队列,先进先出(FIFO)。这意味着,入队永远是在环的尾部(tail),出队永远是在环的头部(head)。这个环的容量是一开始就确定的,那么不停变换的,是头尾两个指针:入队驱动tail,出队驱动head,在环上单向轮转。

性能优势

我们可以将RingBuffer实现为一个不停覆盖尾部的版本, 以提供一种高性能的有限无锁队列:

  • 它使用数组,比链表要快,且基于一个可预测的访问模式(数组内元素的内存地址 具有连续性),意味着它是CPU缓存友好的——在硬件级别,数组中的元素是会被预加载的;
  • 在程序生命周期内,这个数组会一直存在,不需要经常做垃圾回收(没有抖动就没有伤害)。

一个Scala实现

一个Scala测试

打赏作者
您的支持将激励我继续创作!

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

Write a Comment

Comment