banq
2013-05-05 14:59
2013-05-05 14:32 "@oleio

"的内容

希望它们以抢占的方式来消费 RingBuffer 中的产品。 ...

你希望的抢占是什么样的?一般一个HelloEventHandler 类型一个实例啊。

tangxuehua
2013-05-05 15:11
disruptor如果是pub-sub模式的,那就是不支持抢占模式了。LMAX架构中的, journal, replicator, blp三个event handler都会消费ringbuffer中的槽数据的。只是blp不会跑在journal, replicator前面而已。journal, replicator这两个则是完全并行的。ringbuffer中的数据不像queue,会被取出去然后没有了。ringbuffer里的数据永远不会被移除,除非是被publisher覆盖掉。所以,我觉得应该是实现不了你要的抢占竞争执行某个event的功能的。

[该贴被tangxuehua于2013-05-05 15:14修改过]

oleio
2013-05-05 19:50
to banq:

你希望的抢占是什么样的?一般一个HelloEventHandler 类型一个实例啊。

我是希望 一个handler类型 能有多个实例,以便于 消费者可以多线程的来跑,进一步提升性能。

k8king
2013-08-23 10:56
这个可以用SequenceBarrier来实现吧?我觉得其实你不是要抢占,而是希望不同的线程处理ringbuffer里不同的信息,互不争抢,又不遗漏。

supernavy
2013-09-13 13:36
我个人的看法是,disruptor模式的产生过程中证明了,无锁可以取得最高的性能,一个线程处理+无锁要比N个线程+有锁快。

所以我想楼主的初衷是希望用多个线程来提高速度,但是实际上这不可避免的引入锁,最终的结果是比只有一个线程处理还要慢。

而且LMAX架构并不是说只有一个disruptor,实际的系统中所有耗时的处理都应该分解并且通过异步的方式(也就是这里的disruptor)进行链接。

猜你喜欢