java.util.concurrent.ConcurrentLinkedQueue
浮现在脑海中,但它是否真的适合这种双线程场景?我正在寻找双方(生产者和消费者)可能的最小延迟。如果队列为空,您可以立即返回null。如果队列已满,您可以立即丢弃您提供的条目。
ConcurrentLinkedQueue是否使用超快速和轻量锁(AtomicBoolean)?有没有人对ConcurrentLinkedQueue进行基准测试或了解最快的方法呢?
其他详细信息:我认为队列应该是合理的,这意味着消费者不应该让消费者等待任何时间(通过正面运行),反之亦然。 / p>
答案 0 :(得分:4)
对于我所知道的Java中最低延迟,您可以使用LMAX开发的Disruptor模式。
基本上,它们正在减少所有延迟,这意味着很多相当独特的解决方案可以解决已确定的问题。例如,他们尽可能预先分配并重用对象(以防止垃圾收集增加额外的延迟)。
他们的解决方案基于内存障碍,可防止跨越某些检查点的代码形式的无序执行。通过这样做,他们可以确保一个生产者线程和许多消费者线程之间的正确同步。
Here is a whitepaper describing the problem and LMAX's solution,and a recent youtube video解释解决方案的基本原理和设计细节。它需要大量的代码重组才能使用,但它目前是城里最快,最低延迟的东西。