2013-06-26 2 views
1

LMX Disruptor의 장벽은 어떻게 작동합니까? DSL과 함께 disruptor를 사용하는 방법을 이해합니다. 그러나 장벽이나 시퀀스 장벽이 어떻게 작동하는지에 대한 좋은 참고 자료를 찾지 못했습니다.Disruptor Barriers는 어떻게 작동합니까?

다음 링크를 찾았지만 장벽 데이터 구조를 사용하는 방법을 잘 모릅니다. 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는 SequenceBarrier를 만들도록 강요합니다. 이유를 이해하고 싶습니다. CircularBuffer에서 newBarrier를 통해 장벽을 제거해야합니까? 하지만 처음에는 BatchEventProcessor를 사용하고 싶지 않지만 두 번째 또는 세 번째 핸들러 (예 : 그때까지)로 –

+0

을 사용하려는 경우에는 작동하지 않습니다. DSL을 사용해 보셨습니까? 여기에서 확인하십시오 - https://github.com/LMAX-Exchange/disruptor/wiki/Disruptor-Wizard – jasonk

관련 문제