轮询破坏者

Pollable disruptor

我做了很多研究,但我还没有找到解决办法。我想找一个类似于 LMAX disruptorpollable ring buffer。我有很多发布者和一个 reader.

disruptor 的问题在于它使用自己的专用线程(池)来读取消息,但我想从单独的线程中读取它们,该线程还执行其他操作。

我看到的一种替代方法是使用 agrona 中的 ManyToOneConcurrentArrayQueuejctools 中的 MpscArrayQueue。但是这些队列 preallocates 对象都没有 LMAX disruptor 那样。当我调用 ManyToOneConcurrentArrayQueue::offerMpscArrayQueue::offer 时,我将对象的所有权转移到队列中,而当我调用 ManyToOneConcurrentArrayQueue::pollMpscArrayQueue::poll 时,我从它们那里获取了所有权。这是一个问题,因为它迫使我有一个单独的对象池来回收这些对象以避免产生垃圾。它显然比 preallocated array 慢,后者始终保留其内容的所有权(LMAX disruptor 包中的 la RingBuffer)。

我不想重新发明轮子自己构建这样的数据结构,但我也找不到现有的。如果有人已经遇到过这样的结构,我将不胜感激。

可以直接使用 LMAX 干扰器 RingBuffer 实现。

可能利用项目的其他部分而不启动 disruptor 作为一个整体。

disruptor 库包含一个 EventPoller class