LMX破坏者的障碍是如何运作的?我确实理解如何在DSL中使用disruptor。但我无法找到屏障或序列障碍如何发挥作用的良好参考。
e.g。我发现以下链接,但不知道如何使用屏障数据结构。 http://mechanitis.blogspot.com/2011/08/dissecting-disruptor-why-its-so-fast.html
例如,新的BatchEventProcessor()接受SequenceBarrier。为什么?我该如何创建一个。
答案 0 :(得分:3)
首先 - 内存屏障是CPU架构原语; SequenceBarrier是Disruptor中的实现类。我将尝试涵盖两者。
内存屏障 - 允许软件向硬件提供指令,指示X之前的所有指令必须在X之前完成。这是因为CPU提供了无序执行优化。有关详细信息,请阅读本文 - 请参阅Memory Barriers: a Hardware View for Software Hackers。
SequenceBarrier是Disruptor中的一个实现类;一般来说,它是Disruptor的一部分,你不需要在Disruptor之外使用它。它实际上在概念上执行类似于内存屏障的功能 - 它可以防止消费者在环形缓冲区上领先于发布者。 见 - SequenceBarrier on github。