tecentID9347F
2013-11-22 14:58
这几天,写看了下关于LMAX的架构,看了网上流传的测试代码,也产生了和楼主相同的疑问,比如:当生产者已经发布了多个消息在RingBuffer中,如果此时有多个消费者, 发现所有的消费者都会执行每个Slot的Event事件。例如 写日志、备份数据、和业务逻辑的处理。只是处理的先后顺序不一致。 个人感觉这和LMax所说的不同的消费者执行不同的Slot有些不一样!还是LMAX只是支持这种广播的方式。如果我想多个消费者并行执行RringBuffer ,已经被每个消费者执行的则不再执行能否用disruptor实现!

tecentID9347F
2013-11-22 15:11
目前disruptor的消费的业务逻辑代码 都写在其onEvent的回调函数里,没有发现能改变其下标(cursor)的方法。想知道有没有朋友遇到和我一样的问题,刚刚接触Disruptor许多地方不是特别的了解。

banq
2013-11-22 15:19
2013-11-22 14:58 "@tecentID9347F"的内容
如果我想多个消费者并行执行RringBuffer ,已经被每个消费者执行的则不再执行能否用disruptor实现! ...

Disruptor的特点就是将多线程通过ringbuffer变成单线程,从而实现单写操作:http://www.jdon.com/performance/singlewriter.html

tecentID9347F
2013-11-22 15:27
实际操作中测试还发现,当生产者发布了多个消息之后,消费者只是再单独的线程中运行,我想知道 是不是只有超线程技术的机子才能支持他说的哪个并发。

tecentID9347F
2013-11-22 15:43
2013-11-22 15:19 "@banq"的内容
Disruptor的特点就是将多线程通过ringbuffer变成单线程,从而实现单写操作:http://www.jdon.com/performance/singlewriter.html ...

非常感谢您,抽时间看我的评论,看了单写的哪个操作。(Disruptor的特点是将多线程生产者通过ringbuffer变成单线程消费者,通过单线程消费者对共享资源进行写操作)但是这样的话,如果并发量比较少,disruptor 的优势没有启用多个线程去跑任务消耗的时间快!这样Disruptor的优势又在哪里。

猜你喜欢