← 返回专栏列表

并发算法系列

共 6 篇文章

1. CAS 与 ABA 问题

CAS(Compare-And-Swap)是无锁并发编程的基石,是一条原子指令:仅当内存值等于预期值时,才将其更新为新值。Java 的 AtomicInteger、ConcurrentHashMap、无锁队列均以 CAS 构建。本文深入 CAS 的硬件实现、ABA 问题及修复方案,以及无锁算法的三个层次。

2. AQS(AbstractQueuedSynchronizer)

AQS(AbstractQueuedSynchronizer)是 Java 并发包的核心基础框架,通过一个 volatile int state 字段和 CLH 变体双向队列,为 ReentrantLock、Semaphore、CountDownLatch 等同步器提供统一的线程排队、阻塞、唤醒机制。

3. MVCC(多版本并发控制)

MVCC(Multi-Version Concurrency Control,多版本并发控制)通过保留数据的历史版本,实现"读不阻塞写、写不阻塞读",是 MySQL InnoDB、PostgreSQL、Oracle 等主流数据库实现高并发事务隔离的核心机制。

4. 无锁队列(Michael-Scott Queue)

Michael-Scott 无锁队列通过 CAS 操作替代互斥锁实现线程安全的 FIFO 队列,被 Java 、Disruptor 等高性能框架广泛采用,在高并发场景下显著降低锁竞争开销。

5. Disruptor(无锁环形缓冲)

Disruptor 是 LMAX 开发的无锁环形缓冲队列,通过预分配内存、CAS Sequence、缓存行填充解决高并发下 ArrayBlockingQueue 的锁竞争与 GC 压力问题,被 Log4j2、Netty、Storm 等系统用于实现每秒千万级消息吞吐。

6. RCU(Read-Copy-Update)

RCU(Read-Copy-Update)是一种读者完全无锁、写者通过"复制新版本 + 原子替换指针 + 等待旧读者完成后释放旧版本"实现并发安全的同步机制,被 Linux 内核路由表、模块列表、网络协议栈等读多写极少场景广泛使用,读侧开销接近零。