gpt4 book ai didi

java - LMAX Disruptor 作为阻塞队列?

转载 作者:行者123 更新时间:2023-12-02 07:38:31 24 4
gpt4 key购买 nike

有什么办法可以在一个结构中同时拥有这两种功能 -

  1. BlockingQueue 的语义,即非阻塞 peek、阻塞 poll 和阻塞 put。多个提供者一个消费者。
  2. RingBuffer,它有效地充当对象池,因此我不想将新对象放入环形缓冲区,而是想重用那里的现有对象,复制状态。所以基本上 LMAX 干扰器的功能是开箱即用的。

已经有类似的东西了吗?我想我可以尝试使用 Disruptor 来实现这一点,如果我理解正确的话,我已经可以将它用作带有阻塞 put 的阻塞队列(如果环形缓冲区“已满”)。它已经具有我需要的“可重用对象”语义。所以唯一的问题是如何创建一个能够拉动对象的客户端(而不是使用回调),所以因为我不太熟悉内部 Disruptor 结构 - 可以做到吗?使用所有这些定序器,创建一个新的 EventProcessor 或类似的东西?

不,在客户端设置阻塞队列并从中获取数据的明显解决方案并不是理想的解决方案,因为它破坏了使用干扰器对象池的全部意义 - 您需要一个新的池现在,或者只是在放入阻塞队列等之前在回调中创建一个新对象,我根本不想创建任何垃圾。

那么有没有办法用 Disruptor 或任何其他面向性能/无垃圾的 java 库来实现它?

最佳答案

我们于今年早些时候开源了 Conversant Diruptor,其中包括 DiruptorBlockingQueue。您可以在 github 上找到代码

Conversant Disruptor 几乎可以轻松包含在任何项目中,因为它支持 BlockingQueue api 并发布在 Maven Central 上。

关于java - LMAX Disruptor 作为阻塞队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38095065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com