Disruptor 可以动态增加消费者吗

15-04-15 abaddoncoder
    

jdon里有不少关于Disruptor的讨论,我有一个问题就是:它可以动态增加消费者吗

[该贴被abaddoncoder于2015-04-15 09:04修改过]

[该贴被abaddoncoder于2015-04-15 21:17修改过]

    

banq
2015-04-16 08:54

2015-04-15 09:04 "@abaddoncoder"的内容
它可以动态增加消费者吗 ...

diruptor最优模型是生产者与消费者的关系是1:1,你可以让这一个消费者专门做分发dispatch,这样变成1:1:N,最后的N就是你需要的动态多个消费者,请注意,一旦让这个消费者做分发,效率性能就会降低。

abaddoncoder
2015-04-19 00:32

多谢banq解答

我实际是想把ringbuffer里的事件,跟据某类型的事件分发到一个线程里去处理,也就是说这个线程只处理这一类型的事件,但ringbuffer里的事件类型是动态变化,并非固定几类事件

本想自己通过线程来实现,大致思路就是:产生一个新类型的事件,就给分配一个线程,等这一类事件结束了,这个线也over了,线程的个数跟随事件类型的数量变化而变化。后来想以前在JDon上看到有高性能无锁的Disruptor,就用上了,但最后还是得自己加分派

abaddoncoder
2015-04-19 11:59

banq

在jdon里提到Disruptor是把多写操作通过ringbuffer变单写操作,但实际上,我写代码测试的时候发现,disruptor在创建eventHandler去处里事件时,好像还是创建了多个线在处理

代码很简单:

disruptor.handleEventsWithWorkerPool(new MyEventHandler());

disruptor.start();

但在MyEventHandler()中onEvent函数中打印结果:

11:29:43.143 [pool-2-thread-1] ...

11:29:43.198 [pool-1-thread-1] ...

让人感觉就不是单写了,并且在写数据库时还出现了并发异常,所以应该不是单写,要么就是我代码写的不对

abaddoncoder
2015-04-19 13:00

果真是我代码写得不对,事实因为多线程没同步产生了多个disruptor