收藏

RingBuffer

2021-12-07  本文已影响0人  NazgulSun

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

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读