1

我想使用 LMAX 的破坏者,但我不确定我的用例是否适合它。基本上有一个或 2 个生产者和 n 个消费者。诀窍是,当消费者接收到一个事件并检查其中的一些数据时,如果它不能立即使用它,它必须重新发布数据(它基本上是一个轮询方案)。我创建了容量我不担心的环形缓冲区太小,但现在我的问题是:请求新序列并从事件处理程序发布是否安全,或者这会以某种方式破坏功能?通过一个小测试,我使这看起来足够安全,但我不知道它在我的特定情况下会如何表现。我担心 onEvent 方法可能会在我请求序列之后但在我更新-> 发布新对象之前被调用,我真的不知道破坏者如何处理这些情况

4

1 回答 1

0

执行此操作的一种方法(无需EventHandler重新发布事件)是实现单独的 "重新发布" Disruptor。如果消费者线程发现它不能立即消费事件,它会将事件写入该缓冲区,然后单独的线程会将这些消息传递回主事件队列。

这将增加主队列的写入者数量,但考虑到用例,这似乎是不可避免的。此解决方案的另一个潜在问题是,在重新发布之前添加到主队列的任何新消息之后,必须使用重新发布的事件。

于 2013-10-14T23:52:50.140 回答