轮询破坏者
Pollable disruptor
我做了很多研究,但我还没有找到解决办法。我想找一个类似于 LMAX disruptor
的 pollable ring buffer
。我有很多发布者和一个 reader.
disrupto
r 的问题在于它使用自己的专用线程(池)来读取消息,但我想从单独的线程中读取它们,该线程还执行其他操作。
我看到的一种替代方法是使用 agrona
中的 ManyToOneConcurrentArrayQueue
或 jctools
中的 MpscArrayQueue
。但是这些队列 preallocates
对象都没有 LMAX disruptor
那样。当我调用 ManyToOneConcurrentArrayQueue::offer
或 MpscArrayQueue::offer
时,我将对象的所有权转移到队列中,而当我调用 ManyToOneConcurrentArrayQueue::poll
或 MpscArrayQueue::poll
时,我从它们那里获取了所有权。这是一个问题,因为它迫使我有一个单独的对象池来回收这些对象以避免产生垃圾。它显然比 preallocated array
慢,后者始终保留其内容的所有权(LMAX disruptor 包中的 la RingBuffer)。
我不想重新发明轮子自己构建这样的数据结构,但我也找不到现有的。如果有人已经遇到过这样的结构,我将不胜感激。
可以直接使用 LMAX 干扰器 RingBuffer 实现。
可能利用项目的其他部分而不启动 disruptor 作为一个整体。
disruptor 库包含一个 EventPoller class
我做了很多研究,但我还没有找到解决办法。我想找一个类似于 LMAX disruptor
的 pollable ring buffer
。我有很多发布者和一个 reader.
disrupto
r 的问题在于它使用自己的专用线程(池)来读取消息,但我想从单独的线程中读取它们,该线程还执行其他操作。
我看到的一种替代方法是使用 agrona
中的 ManyToOneConcurrentArrayQueue
或 jctools
中的 MpscArrayQueue
。但是这些队列 preallocates
对象都没有 LMAX disruptor
那样。当我调用 ManyToOneConcurrentArrayQueue::offer
或 MpscArrayQueue::offer
时,我将对象的所有权转移到队列中,而当我调用 ManyToOneConcurrentArrayQueue::poll
或 MpscArrayQueue::poll
时,我从它们那里获取了所有权。这是一个问题,因为它迫使我有一个单独的对象池来回收这些对象以避免产生垃圾。它显然比 preallocated array
慢,后者始终保留其内容的所有权(LMAX disruptor 包中的 la RingBuffer)。
我不想重新发明轮子自己构建这样的数据结构,但我也找不到现有的。如果有人已经遇到过这样的结构,我将不胜感激。
可以直接使用 LMAX 干扰器 RingBuffer 实现。
可能利用项目的其他部分而不启动 disruptor 作为一个整体。
disruptor 库包含一个 EventPoller class