Disruptor 源码分析(6) 一个消费者和多个消费者的区别

disruptor一个消费者和多个消费者的区别

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的方式.)

猜你喜欢

转载自huangyunbin.iteye.com/blog/1944383