3

java.util.concurrent.ConcurrentLinkedQueue想到了,但对于这种双线程场景来说,它真的是最优的吗?我正在寻找双方(生产者和消费者)可能的最小延迟。如果队列为空,您可以立即返回 null,如果队列已满,您可以立即丢弃您提供的条目。

ConcurrentLinkedQueue 是否使用超快速和轻量级的锁(AtomicBoolean)?有没有人对 ConcurrentLinkedQueue 进行基准测试或知道最终最快的方法?

附加细节:我想队列应该是一个公平的队列,这意味着消费者不应该让消费者等待超过它需要的时间(通过提前运行它),反之亦然。

4

1 回答 1

4

对于我所知道的 Java 中的最低延迟,您可以使用 LMAX 开发的 Disruptor 模式。

基本上,他们正在减少所有延迟,这意味着许多相当独特的解决方案可以解决已确定的问题。例如,它们尽可能多地预分配并重用对象(以防止垃圾收集增加额外的延迟)。

他们的解决方案基于内存屏障,可防止代码表单越过某些检查点的乱序执行。通过这样做,他们可以确保一个生产者线程和多个消费者线程之间的正确同步。

这是描述问题和 LMAX 解决方案的白皮书以及最近的 youtube 视频,解释了解决方案的基本原理和设计细节。它需要大量的代码重组才能使用,但它目前是城里最快、最低延迟的东西。

于 2012-04-04T22:31:02.930 回答