java-用一个使用者和一个生产者实现并发队列的最快方法是什么?
作者:互联网
我想到了java.util.concurrent.ConcurrentLinkedQueue,但是对于这种两线程方案真的是最佳选择吗?我正在寻找双方(生产者和消费者)可能的最小延迟.如果队列为空,则可以立即返回null;如果队列已满,则可以立即丢弃提供的条目.
ConcurrentLinkedQueue是否使用超快速和轻锁(AtomicBoolean)?有没有人对ConcurrentLinkedQueue进行基准测试,或者知道这样做的最终最快方法?
其他详细信息:我认为队列应该是公平的,这意味着使用者不应让使用者等待的时间超过所需的时间(通过提前运行),反之亦然.
解决方法:
对于我所知道的Java中最低的延迟,您可以使用LMAX开发的Disruptor模式.
从根本上讲,它们减少了所有延迟,这意味着许多针对成熟问题的非常独特的解决方案.例如,它们尽可能预分配并重用对象(以防止垃圾回收增加额外的延迟).
他们的解决方案基于内存屏障,可以防止乱码执行某些检查点的代码形式.通过这样做,它们可以确保一个生产者线程和多个使用者线程之间的正确同步.
Here is a whitepaper describing the problem and LMAX’s solution,and a recent youtube video解释了解决方案的原理和设计细节.要使用它,需要进行大量的代码重组,但这是目前最快,最慢的延迟.
标签:multithreading,concurrency,optimization,real-time,java 来源: https://codeday.me/bug/20191101/1983990.html