无锁并发框架Disruptor

概述

在逛并发编程网的时候,看到了并发框架Disruptor译文这个系列文章。

Martin Fowler在自己网站上写了一篇LMAX架构(译文)的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易。这个系统是建立在JVM平台上,其核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单。业务逻辑处理器完全是运行在内存中,使用事件源驱动方式。业务逻辑处理器的核心是Disruptor。

Disruptor它是一个开源的并发框架,能够在无锁的情况下实现网络的Queue并发操作。感兴趣的同学可以去他的官网阅读论文。

我对Disruptor为什么能那么快的总结如下:

1. CAS代替锁 

2. Ringbuffer的设计,考虑到CPU L1 Cache的大小(一般64字节),Ringbuffer是数组(不是链表实现),填充到和Cache大小一样(8个long),来避免伪共享(两个线程额外加载各自的long,而导致对方缓存不命中的情况)的无形性能开销 

3. Ringbuffer上消费者和生产者各自维护一个cursor,是volatile,在写volatile变量的时候是CPU指令级别的,会插入一次内存屏障,保证之前的操作先刷入缓存行(CPU Cache),使得其他线程对这个线程的cursor及时可见,另一方面内存屏障避免了JVM的重排序。虽然volatile不好用,而且也有一定开销,但是开销已经非常小,而且它做了一些批量的手段,具体在读写ringbuffer的实现中还有一些别的设计。


更多Disruptor的设计和介绍,希望参考开头给出的那个系列文章,并且参考Disruptor代码实现,我就不做多余的搬运和总结工作了。

Martin Fowler            博客地址
Martin Thompson    博客地址


全文完 :)  



你可能感兴趣的:(并发编程)