disruptor一个事件处理程序停止其他事件处理程序

时间:2015-07-30 13:06:51

标签: java disruptor-pattern lmax

我正在使用以下事件处理程序运行disruptor实例:

int NUM_EVENT_PROCESSORS = 5;

executor = Executors.newFixedThreadPool(NUM_EVENT_PROCESSORS);

EventFactory factory = new EventFactory();

System.out.println("Starting Disruptor");

disruptor = new Disruptor<>(factory, RING_SIZE, executor, ProducerType.SINGLE, new BlockingWaitStrategy());
disruptor.handleEventsWith(new Logger(), new Replicator(), new Logic());
disruptor.start();

我发现了一个Replicator()线程挂起并阻塞了Logic()线程的实例。

如果ringbuffer中有1个事件,那么disruptor线程是否会顺序工作?

2 个答案:

答案 0 :(得分:1)

每个EventHandler都在&#39;消费者中运行。线程独立于其他消费者线程。其他消费者线程受影响(减速)的唯一时间是当一个消费者太慢以至于RingBuffer变得完全时导致生产者被阻止,从而影响消费者。 Code for consumer thread(i.e code running EventHandler)

答案 1 :(得分:1)

好的,这是我自己的错误。我运行了2套破坏程序(一个用于客户端,一个用于提供程序端),我的客户端代码如下:

disruptor.handleEventsWith(new Logger(), new Replicator()).then(new Logic());

虽然我的提供者端代码如下:

disruptor.handleEventsWith(new Logger(), new Replicator(), new Logic());

所以客户端的破坏者实例正如所告诉的那样。如果复制器阻塞了逻辑线程,那么。

感谢堆栈溢出让我再次检查我的代码。