破坏者一个事件处理程序停止其他事件处理程序
disruptor one event handler stalls other event handlers
我是 运行 具有以下事件处理程序的破坏者实例:
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 个事件,中断线程是否按顺序工作?
每个 EventHandler 运行 在一个独立于其他消费者线程的 'consumer' 线程中。唯一一次其他消费者线程会受到影响(减慢)是当一个消费者太慢以至于 RingBuffer 变得 full 导致生产者被阻塞,这反过来影响消费者。
Code for consumer thread(i.e code running EventHandler)
好的,这是我自己的错误。我 运行 2 套干扰器(一套用于客户端,一套用于提供商),我的客户端代码如下:
disruptor.handleEventsWith(new Logger(), new Replicator()).then(new Logic());
而我的提供商端代码如下:
disruptor.handleEventsWith(new Logger(), new Replicator(), new Logic());
所以客户端的破坏者实例正在按照它被告知的去做。如果复制器阻塞,逻辑线程也会阻塞。
感谢堆栈溢出让我重新检查我的代码。
我是 运行 具有以下事件处理程序的破坏者实例:
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 个事件,中断线程是否按顺序工作?
每个 EventHandler 运行 在一个独立于其他消费者线程的 'consumer' 线程中。唯一一次其他消费者线程会受到影响(减慢)是当一个消费者太慢以至于 RingBuffer 变得 full 导致生产者被阻塞,这反过来影响消费者。 Code for consumer thread(i.e code running EventHandler)
好的,这是我自己的错误。我 运行 2 套干扰器(一套用于客户端,一套用于提供商),我的客户端代码如下:
disruptor.handleEventsWith(new Logger(), new Replicator()).then(new Logic());
而我的提供商端代码如下:
disruptor.handleEventsWith(new Logger(), new Replicator(), new Logic());
所以客户端的破坏者实例正在按照它被告知的去做。如果复制器阻塞,逻辑线程也会阻塞。
感谢堆栈溢出让我重新检查我的代码。