0

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

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() 线程的实例。

如果环形缓冲区中有 1 个事件,中断线程是否按顺序工作?

4

2 回答 2

1

好的,这是我自己的错误。我运行了 2 组干扰器(一组用于客户端,一组用于提供方),我的客户端代码如下:

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

而我的提供商端代码如下:

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

所以客户端的破坏者实例正在按照它被告知的那样做。如果复制器阻塞,逻辑线程也会阻塞。

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

于 2015-08-04T08:27:25.590 回答
1

每个 EventHandler 在独立于其他消费者线程的“消费者”线程中运行。唯一可能影响(减慢)其他消费者线程的时间是当一个消费者太慢以至于 RingBuffer 变导致生产者被阻塞,进而影响消费者。 消费者线程的代码(即运行 EventHandler 的代码)

于 2015-07-31T17:16:59.113 回答