無鎖併發框架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 部落格地址
全文完 :)