2013-06-26 64 views
1

LMX干擾器的屏障是如何工作的?我確實懂得如何使用DSL進行干擾。但我無法找到一個很好的參考如何障礙或序列壁壘工作。干擾壁壘如何工作?

例如我發現下面的鏈接,但不知道如何使用Barrier數據結構。 http://mechanitis.blogspot.com/2011/08/dissecting-disruptor-why-its-so-fast.html

例如,新的BatchEventProcessor()接受一個SequenceBarrier。爲什麼?以及如何創建一個。

+0

希望這會有所幫助,它們實際上在概念上是相關的,但是在堆棧的不同層次上。 – jasonk

回答

2

首先 - 內存屏障是CPU體系結構原語; SequenceBarrier是Disruptor中的一個實現類。我會試圖涵蓋兩者。

內存屏障 - 允許軟件向硬件提供指令,指定X點之前的所有指令必須在X之前完成。這是因爲CPU提供亂序執行優化。有關更多詳細信息,最好閱讀本文 - 請參閱Memory Barriers: a Hardware View for Software Hackers

SequenceBarrier是Disruptor中的一個實現類;一般來說它是Disruptor的一部分,你不需要在Disruptor之外使用它。它實際上在內存屏障的概念上執行了類似的功能 - 它可以防止消費者在環形緩衝區上領先發行商。 參見 - SequenceBarrier on github

+0

謝謝Json!當創建BatchEventProcessor時,它需要一個SequenceBarrier,它迫使我們創建一個SequenceBarrier。這就是爲什麼我想要理解。我是否應該通過newBarrier從CircularBuffer獲得屏障。但是,如果我不想一開始就使用BatchEventProcessor,而是作爲第二或第三處理程序(例如,通過那麼),那不會起作用。 –

+0

您是否嘗試過使用DSL?點擊這裏 - https://github.com/LMAX-Exchange/disruptor/wiki/Disruptor-Wizard – jasonk