EventHandlerGroup<T> createEventProcessors(final Sequence[] barrierSequences, final EventHandler<T>[] eventHandlers) { for (int i = 0, eventHandlersLength = eventHandlers.length; i < eventHandlersLength; i++) { consumerRepository.add(batchEventProcessor, eventHandler, barrier);
可以看到有多少个eventHandler就会有多少个EventProcessor,也就是有多少个consumerInfo
再看disruptor的start方法
public RingBuffer<T> start() { for (ConsumerInfo consumerInfo : consumerRepository) { consumerInfo.start(executor); consumerInfo的start方法: public void start(final Executor executor) { executor.execute(eventprocessor); }
说明每一个eventHandler都是有一个单独的线程去处理的.
从这里可以理解为一个eventHandler就是一个消费者,多个eventHandler就是多个消费者.
在程序上是没有什么区别的,都是通过线程池去跑的.
(上面说的是ConsumerInfo的默认实现类EventProcessorInfo的方式.)