disruptor ringbuffer 缓冲区大小的单位是字节吗
发布网友
发布时间:2022-04-14 04:10
我来回答
共2个回答
热心网友
时间:2022-04-14 05:40
我对Disruptor的最初印象就是ringbuffer。但是后来我意识到尽管ringbuffer是整个模式(Disruptor)的核心,但是Disruptor对ringbuffer的访问控制策略才是真正的关键点所在。
ringbuffer到底是什么?
嗯,正如名字所说的一样,它是一个环(首尾相接的环),你可以把它用做在不同上下文(线程)间传递数据的buffer。
基本来说,ringbuffer拥有一个序号,这个序号指向数组中下一个可用的元素。(校对注:如下图右边的图片表示序号,这个序号指向数组的索引4的位置。)
随着你不停地填充这个buffer(可能也会有相应的读取),这个序号会一直增长,直到绕过这个环。
要找到数组中当前序号指向的元素,可以通过mod操作:
以上面的ringbuffer为例(java的mod语法):12 % 10 = 2。很简单吧。
事实上,上图中的ringbuffer只有10个槽完全是个意外。如果槽的个数是2的N次方更有利于基于二进制的计算机进行计算。
(校对注:2的N次方换成二进制就是1000,100,10,1这样的数字, sequence & (array length-1) = array index,比如一共有8槽,3&(8-1)=3,HashMap就是用这个方式来定位数组元素的,这种方式比取模的速度更快。)
聊一聊disruptor-无锁并发框架
RingBuffer的指针(cursor)属于一个volatile变量,同时也是我们能够不用锁操作就能实现Disruptor的原因之一 生产者对RingBuffer更新序列号,之后会对volatile字段(cursor)的写操作创建了一个内存屏障,这个屏障将刷新所有缓存里的值(缓存失效) 消费者获取RingBuffer序列号,涉及到读冲突的缓存失效,C2在C1之...
视频编码h.265和h.245区别
【微帧科技】是全球知名的视频编码及AI超高清服务提供商,基于超高压缩效率的自研编码技术、前沿的AI图像算法,致力于为企业提供低成本、超高清、智能化的视频服务,每月处理视频超12亿分钟,涉足的应用场景覆盖长视频、短视频、直播、RTC、智能...
Disruptor 源码分析 一个生产者和多个生产者的区别
但是MultiProducerSequencer时候,每一个生产者都有cursor,disruptor采取的做法是用一个数组来存.而且这个数组的大小和RingBuffer的大小是一样的.因为数组的一个位置只会由一个生产者获取,而且一个位置只能被某一圈的时候获取.(获取一个位置两次,表示一个生产者从后面追上另外一个生产者,这个是不允许的.)...
disruptor 线程安全吗
但是MultiProducerSequencer时候,每一个生产者都有cursor,disruptor采取的做法是用一个数组来存.而且这个数组的大小和RingBuffer的大小是一样的.因为数组的一个位置只会由一个生产者获取,而且一个位置只能被某一圈的时候获取.(获取一个位置两次,表示一个生产者从后面追上另外一个生产者,这个是不允许的.)...