可投票的破坏者

时间:2019-01-12 08:09:49

标签: java concurrency low-latency disruptor-pattern

我做了很多研究,但还找不到解决方案。我想找到一个pollable ring buffer,类似于LMAX disruptor。我有很多出版商和一位读者。

disrupto r的问题在于它使用自己的专用线程(池)来读取消息,但是我想从单独的线程中读取消息,这也可以做其他事情。

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

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

2 个答案:

答案 0 :(得分:2)

disruptor 库包含一个 EventPoller

答案 1 :(得分:1)

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

潜在地利用项目的其他部分,而无需整体上启动 disruptor