IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Lock-free Queue

共 2 篇相关文章

IT 累计浏览 14,273

无锁消息队列

这篇讲的是如何在共享内存中设计高效的无锁消息队列。作者从实际项目需求出发——为了将耗时的数据落地任务从主逻辑进程中剥离,以提升整体处理能力——提出了用无锁队列替代频繁系统调用的方案。 文章的核心是从简单到复杂,逐步推演无锁队列的设计。首先探讨了最基础的单生产者与单消费者场景,仅需维护 front 和 rear 指针,利用循环队列即可高效工作。接着,为解决多消费者并发出队的问题,引入了 CAS(Compare & Set)原子操作来安全地更新指针。最后,在多生产者多消费者的最复杂场景下,通过增加一个 write_index 变量,结合两次 CAS 操作来协调生产者之间的写入竞争,确保了数据一致性。 文章结合具体图示和伪代码,清晰地阐述了不同并发模型下的实现关键与细微差别,例如利用 CAS 实现“乐观锁”,以及在生产者操作失败时通过 sched_yield() 让出 CPU 的优化技巧。作者在项目中实际应用了其中一种设计,最终观察到 CPU 使用率下降了约10%,验证了该方案的有效性。

IT 累计浏览 12,093

一种高效无锁内存队列的实现

这篇讲的是LMAX公司开源的高性能内存队列Disruptor的实现原理。作者从设计文档和实践博客出发,梳理了这个被称作“最快队列”的核心设计思想。 Disruptor要解决的是高并发场景下传统队列带来的锁竞争、伪共享和频繁垃圾回收问题。它的核心方案围绕一个环形缓冲区展开,通过预分配固定大小的数组作为存储,避免了动态内存分配的开销。最关键的是,整个读写操作都通过CAS指令实现无锁化,用序列号代替锁来协调多生产者与多消费者。 文章分析了其巧妙之处:利用缓存行填充消除伪共享,采用双缓冲思想优化写入,并允许消费者独立消费,这些设计共同实现了极低的延迟和极高的吞吐量。作者在总结中对比了它与传统并发队列的适用场景,指出Disruptor更适合对延迟敏感、数据处理量巨大的系统核心链路。