Disruptor 源码分析(7) 不同消费者类型的区别
disruptor不同消费者类型的区别
EventProcessor有3个实现类
BatchEventProcessor 多线程并发执行,不同线程执行不同是不同的event
WorkProcessor 多线程排队领event然后再执行,不同线程执行不同是不同的event.但是多了个排队领event的过程,这个是为了减少对生产者队列查询的压力吧.
NoOpEventProcessor 这个不出来任何事情 我们就不管他了.
WorkProcessor的run方法中有这一段
public RingBuffer<T> start(final Executor executor) for (WorkProcessor<?> processor : workProcessors) { executor.execute(processor);
可以看到是多线程的,而且是每一个WorkHandler一个线程.
感觉这里的WorkHandler和EventHandler没区别,都有onEvent方法,只是EventHandler的onEvent多了个sequence.
BatchEventProcessor和前面的WorkProcessor大部分相同,不同的地方是:
1 处理的是EventHandler,后面执行的时候也是一个EventHandler一个线程
2 少了排队取任务的过程,所以线程是并行的.这样多个线程都会同时去检查生产者的位置信息,竞争压力会更大一点.