1. 程式人生 > >無鎖併發框架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    部落格地址

全文完 :)