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

标签:Lock-free

共 3 篇相关文章

IT 累计浏览 3,336

lock free的理解

这篇文章帮读者厘清了一个常见误解:很多人以为“无锁”(lock free)就是指程序不使用互斥锁,但实际上这个概念与“用不用锁”并无直接关系。作者指出,lock free的正确定义是:程序能够保证在所有线程中,至少有一个线程可以持续推进,而不会互相阻塞。这意味着即使某个线程挂掉,整个程序的执行流依然能够向前。 文章用一个典型的无锁循环代码举例——两个线程不断交替修改同一个变量,结果却可能互相卡死,这恰恰说明“不用锁”未必就是 lock free。相反,使用锁也可能实现 lock free 的特性,关键在于设计是否保证了系统整体的进展性。 最后,作者提到在实际编码中,lock free 的实现通常依赖 CAS(Compare and Swap)这类硬件支持的原子操作,从而在避免传统锁开销的同时,保障并发安全与性能。

IT 累计浏览 6,743

无锁HashMap的原理与实现

这篇讲的是如何绕过传统锁机制,实现一个能在多线程环境下高性能运行的HashMap。作者从Java中HashMap的线程安全痛点出发,指出常用的锁替代方案都存在性能或复杂性问题,从而引出了基于CAS(比较并交换)指令的无锁编程思路。 文章的核心是清晰地拆解了无锁HashMap的实现蓝图。它先带你理解了更基础的无锁链表如何利用CAS保证插入和删除操作的原子性,然后直面HashMap最大的挑战——ReHash(扩容)。作者巧妙地借鉴了“分裂有序链表”的思想,通过一种预先对节点哈希值进行位翻转排序并引入哨兵节点的方法,让整个链表在逻辑上始终有序。这样一来,数组扩容时节点只需要确认自己在新链表中的归属,而无需物理移动,从而破解了传统实现中需要同时原子修改多个指针的难题。 此外,文章还提到了为了提升效率而采用的数组懒加载、分块初始化等工程细节。整体而言,这是一篇从原理到实现都讲解得非常扎实的文章,把一个复杂的并发数据结构设计问题,梳理得条理分明。

IT 累计浏览 6,759

并发框架Disruptor译文

这篇讲的是Martin Fowler撰文推荐的高性能并发框架Disruptor,它正是LMAX交易系统能实现每秒600万订单的核心引擎。作者从“为什么会这么快”切入,剖析了传统锁机制的缺点,然后详细拆解了Disruptor的几大“魔法”:通过精心的缓存行填充避免伪共享、利用内存屏障保证无锁操作的正确性,并深入讲解了RingBuffer这个核心数据结构如何实现高效的读写。 文章不仅解释了原理,还提供了具体的使用指南,涵盖了从RingBuffer读取、写入到版本演进的完整路径。最后,通过LMAX架构和实际处理百万TPS的案例,展示了它在解决高并发、低延迟场景下的巨大价值。对于想理解无锁编程和设计高性能内存队列的开发者,这组系统性的译文提供了从理论到实践的清晰线索。