Disruptor高性能线程完全队列思考

Disruptor相比与传统的线程安全的阻塞队列(ArrayBlockingQueue)的改进:
1.内存结构
2.cas无锁操作
内存结构的改进主要有一下几点:
1.利用RingBuffer数据结构而不是数组构建队列底层数据,
好处是主要可以利用局部性原理这个规则,局部性原理主要包括时间局部性和空间局部性。
时间局部性指的是如果一条指令在某个时间点被访问,那么在接下来的一段时间也可能会被访问,而空间局部性原理指的是如果某个内存地址被访问,则与该内存地址相邻的地址空间也会被访问,所以cpu的高速缓存cache会同时缓存该地址空间的数据和相邻地址空间的数据。
所以RingBuffer 在构造数据时在初始化的时候就使用了整块相邻的地址空间。这样的好处是可以利用空间局部性原理提高cpu高速缓存的命中率。同时在初始化后,入队和出队只会修改该地址空间的值,通过set操作,而不是重新申请内存空间,同时可以提高GC效率。
同时内存空间的优化还包括cpu缓存行64位填充,如果不够64位,手动填充,避免伪共享内存情况,当然也是通过空间换取时间的方案。
总结来说,内存方面的优化主要有一下几点:
a。初始化时连续的内存空间来提高cpu高速缓存的利用率
b。出队和入队通过set操作而不是new操作来提高内存利用率,避免频繁GC
c。出队和入队索引通过缓存行填充,达到cpu缓存行64位的要求,从而避免伪共享情况的发生(单个索引变量的修改导致与其共享在同一个cpu缓存行上的变量索引失效)
2.cas无锁操作的性能还是要比传统意义上的管程效率要高一点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值