只有一个消费者和一个生产者实现并发队列的绝对最快方法是什么?

时间:2012-04-04 22:21:55

标签: java multithreading optimization concurrency real-time

java.util.concurrent.ConcurrentLinkedQueue浮现在脑海中,但它是否真的适合这种双线程场景?我正在寻找双方(生产者和消费者)可能的最小延迟。如果队列为空,您可以立即返回null。如果队列已满,您可以立即丢弃您提供的条目。

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

其他详细信息:我认为队列应该是合理的,这意味着消费者不应该让消费者等待任何时间(通过正面运行),反之亦然。 / p>

1 个答案:

答案 0 :(得分:4)

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

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

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

Here is a whitepaper describing the problem and LMAX's solutionand a recent youtube video解释解决方案的基本原理和设计细节。它需要大量的代码重组才能使用,但它目前是城里最快,最低延迟的东西。