1. The Fastest Mutexes (justine.lol)
《最快的互斥锁》摘要
本文通过基准测试比较了 Cosmopolitan Libc 与其他平台(如 Microsoft SRWLOCK、glibc、musl libc、Apple Libc)的互斥锁性能。测试场景为高竞争:30个线程同时对一个共享整数进行100,000次递增操作。
核心性能对比
- Windows(24核 CPU):Cosmopolitan 互斥锁比 Microsoft SRWLOCK 快约2.75倍,CPU资源消耗少18倍;比 Cygwin 的 pthread_mutex_t 快65倍。
- Linux(96核 CPU):Cosmopolitan 互斥锁比 glibc 快3倍,比 musl libc 快11倍;CPU时间消耗分别少42倍和178倍。
- macOS(M2 Ultra):Cosmopolitan 互斥锁与 Apple Libc 性能基本持平,因在 ARM 平台上采用简化算法并调用系统
ulock。
性能优势原因
Cosmopolitan 的互斥锁基于 nsync 库(由 Google 工程师 Mike Burrows 开发),其优化策略包括:
- 无竞争时快速锁定:使用乐观 CAS(比较并交换)操作。
- 减少缓存一致性开销:竞争时将等待线程加入链表,每个等待者拥有独立信号量和缓存行,避免多核争用同一缓存行。
- 操作系统协作:利用 futex(Linux)、ulock(macOS)、WaitOnAddress(Windows)等机制,使等待线程休眠而不消耗 CPU。
- 防止饥饿:通过“长等待”机制限制新线程获取锁,确保公平性。
- 优化唤醒流程:使用“指定唤醒者”位,避免不必要的线程唤醒。
实际应用
作者通过 http://ipv4.games/ 服务器展示该互斥锁在真实高负载下的表现(该服务曾抵御数千万 IP 的 DDoS 攻击),并强调在高竞争场景下,互斥锁的实现差异对性能有决定性影响。
补充说明
- 测试代码包含基准测试框架和自旋锁实现(自旋锁适用于特定底层场景,但总体不推荐)。
- 文章指出,未充分利用 Cosmopolitan 互斥锁在高竞争场景的优势可能被视为“不负责任”,因其能显著减少服务器资源消耗。
结论:Cosmopolitan 的互斥锁在高竞争、小临界区场景下性能显著优于其他主流实现,在其他情况下也至少持平。