ConcurrentHashMap的十五年演进:从分段锁到CAS如何重塑Java并发基石

2003年,Doug Lea向JCP提交了JSR-166规范提案,试图为Java引入一套标准化的并发工具库。在此之前,Java开发者面对并发场景时只能在synchronized、Hashtable和Collections.synchronizedMap之间做出选择——它们要么过于粗粒度,要么性能堪忧。ConcurrentHashMap作为这套工具库的核心组件之一,其设计理念影响了此后二十年Java并发编程的范式。 ...

12 min · 5720 words

跳表:概率如何击败确定性复杂度

title: “跳表:概率如何击败确定性复杂度” date: “2026-03-07T04:35:05+08:00” description: “从William Pugh 1990年的原始论文出发,深入解析跳表的概率平衡原理、Redis与LevelDB的技术选型逻辑、与红黑树的权衡分析,以及为什么这种"用随机换简单"的设计哲学在高性能系统中持续发光。” draft: false categories: [“数据结构”, “算法”, “系统设计”] tags: [“跳表”, “Skip List”, “Redis”, “红黑树”, “概率数据结构”, “并发编程”, “LevelDB”] 1989年,马里兰大学的William Pugh向 Communications of the ACM 投递了一篇仅四页的论文。这篇论文提出了一个看似荒谬的问题:能不能用掷硬币的方式,替代红黑树中那些令人头疼的旋转操作? ...

10 min · 4737 words

进程调度:为什么Linux放弃了O(1)的完美时间复杂度

2001年,Linus Torvalds在Linux内核邮件列表中写下了这样一句话:“你要意识到,很少有东西能像调度器那样经受住时间的考验。这恰好证明了调度是简单的。” ...

11 min · 5063 words