消费者如何回复到同一个Disruptor环缓冲区

时间:2015-01-05 04:38:11

标签: disruptor-pattern

在多生产者设置中,有一个生产者线程和一个消费者线程。消费者可以将新事件发回到同一个环形缓冲区吗?我认为当缓冲区已满并且消费者线程在处理当前事件时永远不会获得空闲插槽时它会中断。换句话说,发生死锁。

最好的方法是什么?我是否必须引入一种代理线程,它接收来自消费者的事件并将其发布到环形缓冲区,就像普通的生产者一样?

补充 - 为什么有用? 假设消费者线程正在处理股票市场数据事件,它需要向市场模拟器(一个类)发送订单,市场模拟器应该将订单执行事件发送到同一个环形缓冲区,理想情况下。

2 个答案:

答案 0 :(得分:1)

根据有关的其他细节提供单独的答案(我仍然相信我的原始答案是有效的)。

在我的脑海/经验中,你想要一次性做很多事情,因为你将环形缓冲区和发布者的消费者混为一谈,这通常是一个单独的问题。我通常希望模拟器的响应事件以与处理它的原始事件相同的方式传递到环形缓冲区。

说过你所要求的实际上是可能的。

然而,您必须自己完成更多的工作并编写自定义EventProcessor,这样您就可以在尝试发布事件之前将传入的消息标记为已处理(从而释放插槽) 。

答案 1 :(得分:0)

如果您使用Single producer设置,则消费者无法回复到环形缓冲区,因为它不是Single producer

退一步为什么只有一个消费者需要写入环形缓冲区?它已经知道它做了什么,没有别的东西会从缓冲区读取。

如果您有多个消费者,您可以回写缓冲区,但要确保其他消费者在写入缓冲区而不是生成器序列的消费者上进行门控。