这篇文档属于类型a(单篇原创研究论文),以下是针对该研究的学术报告:
本研究由Raed Romanov(俄罗斯高等经济研究大学)和Nikita Koval(荷兰JetBrains公司)共同完成,发表于PPoPP ‘23(ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming)会议,会议时间为2023年2月25日至3月1日,地点为加拿大蒙特利尔。论文标题为《The State-of-the-Art LCRQ Concurrent Queue Algorithm Does Not Require CAS2》。
研究领域:并发数据结构(Concurrent Data Structures),具体聚焦于无锁队列(Lock-Free Queue)的设计与优化。
研究动机:
现代高负载应用(如分布式系统、实时数据处理)依赖高效的并发队列,但现有最优算法LCRQ(Concurrent Ring Queue)依赖CAS2(双地址比较交换,Compare-and-Swap on Two Contiguous Memory Locations)指令。然而,CAS2在多数编程语言(如Java、Kotlin、Go)和硬件架构中未被支持,导致LCRQ的移植性受限。
研究目标:
提出一种无需CAS2的LCRQ改进算法LPRQ(Portable Ring Queue),仅通过标准原子指令(如CAS和FAA)实现同等性能,同时解决现有替代方案(如FAAArrayQueue、LSCQ)的性能缺陷。
dequeue()中的CAS2,改为通过CAS(单地址比较交换)和FAA(Fetch-and-Add)实现同步。enqueue()先将线程令牌写入目标单元格。dequeue():通过双重检查(读取epoch与值的一致性快照)避免竞态条件。Thread.currentThread())作为令牌,避免硬件依赖。性能对标LCRQ:
超越替代方案:
缓存效率:
科学价值:
- 首次实现无需CAS2的高性能无锁队列,解决了LCRQ的移植性瓶颈。
- 提出线程令牌+epoch协同的同步范式,为其他并发数据结构设计提供新思路。
应用价值:
- 可直接集成至Java、Go等语言的标准库,提升高并发场景下的队列性能。
- 适用于低延迟系统(如金融交易、实时流处理)。
(报告总字数:约1800字)