Disruptor框架入门

Disruptor是LMAX出品的一个高效的无锁并发框架,它高效核心在于其无锁队列RingBuffer的独特设计。

1.Disruptor是什么?

Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。 

Disruptor 比传统的基于锁的消息框架的优势在于:它是无锁的、CPU友好;它不会清除缓存中的数据,只会覆盖,降低了垃圾回收机制启动的频率。

2.Disruptor的原理

Disruptor提供的编程模型:它有一个或多个作者和读者。有一排从旧到新的条目(从左到右)。作者可以在右侧新增条目。每个读者按从左到右的顺序读取条目。读者显然不能跳过作者先读取。条目不能被删除。我用“读者”代替“消费者”来避免让人以为条目会被消费掉。不过我们知道最后一个读者左边的条目是没有用处的。
通常读者可以并发地独立地读取条目。

Disruptor的主要目标就是性能。Disruptor使用一个预分配的条目环。这个环足够大,但是有上限,从而不会超出容量。如果环满了,作者会一直等待,直到最慢的作者前进而腾出空间。条目对象是预分配的并且会一直存在,以减少GC的消耗。我们不会增加新的条目对象或是删除旧的,相反的,作者会请求一个已存在的条目,填充它的字段,然后通知读者。

3.Disruptor为什么快?

  • 不使用锁。通过内存屏障和原子性的CAS操作替换锁。

  • 缓存基于数组而不是链表,用位运算替代求模。缓存的长度总是2的n次方,这样可以用位运算 i & (length - 1) 替代 i % length

  • 预分配缓存对象,通过更新缓存里对象的属性而不是删除对象来减少垃圾回收。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值