閱讀977 返回首頁    go 阿裏雲 go 技術社區[雲棲]


無鎖並發框架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    博客地址


全文完 :)  



最後更新:2017-04-03 12:55:10

  上一篇:go 視音頻編解碼基本術語及解釋
  下一篇:go Android Eclipse之Git插件安裝、配置、提交、修改、衝突、查看曆史、覆蓋。