一、Disruptor 是什么?
Disruptor 是一个高性能异步处理框架,也可以认为是一个消息框架,它实现了观察者模式。
Disruptor 比传统的基于锁的消息框架的优势在于:它是无锁的、CPU友好;它不会清除缓存中的数据,只会覆盖,降低了垃圾回收机制启动的频率。
这个解读是在最新版 3.1.1 的源码上进行。
关于Disruptor的更多介绍可见: http://ifeve.com/disruptor/
二、Disruptor 为什么快
- 不使用锁。通过内存屏障和原子性的CAS操作替换锁。
-
缓存基于数组而不是链表,用位运算替代求模。缓存的长度总是2的n次方,这样可以用位运算
i & (length - 1)
替代i % length
。 -
去除伪共享。CPU的缓存一般是以缓存行为最小单位的,对应主存的一块相应大小的单元;当前的缓存行大小一般是64字节,每个缓存行一次只能被一个CPU核访问,如果一个缓存行被多个CPU核访问,就会造成竞争,导致某个核必须等其他核处理完了才能继续处理,响应性能。去除伪共享就是确保CPU核访问某个缓存行时不会出现争用。
-
预分配缓存对象,通过更新缓存里对象的属性而不是删除对象来减少垃圾回收。