JAVA高性能内存队列-disruptor

JAVA内置队列

 

高性能内存队列-disruptor

 

disruptor为啥这么快

无锁设计

内部采用CAS方式获取下一个任务序列号,没有锁竞争,不需要线程上下文切换

伪共享问题解决

当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能。

 

 

如何解决?

  • 缓冲行填充,增大数组元素的间隔使得不同线程存取的元素唯一不同的缓存行上,以空间换时间,避免伪共享。
  • 缓存行大小一般是64个字节,然后在序列号变量左右各自填充7个long比那里,来确保任务序列号自己独占一个处理器缓存行。

数组实现

  • 底层数组实现,下标访问,速度快,时间复杂度O(1)。
  • 采用事件对象预填充数组,发布任务时只需要获取序列号上的事件对象然后绑定任务即可,可以循环利用数组中的事件对象,减少垃圾回收。
  • 数组长度固定为2^n,通过位运算,加快定位的速度。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huayang183

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值