852 字
2 分钟
编程模式与实践
编程模式是前人在大量工程实践中提炼出的可复用解决方案。和教科书上的 GoF 设计模式不同,这里收录的模式都来自真实的生产系统——React、Linux 内核、Go 运行时、PostgreSQL——并且至今仍在服役。
这个系列讲什么
本系列将编程模式按场景分为七个子系列:
| 子系列 | 主题 | 篇数 |
|---|---|---|
| 设计原则 | SOLID、DRY/KISS/YAGNI 等代码设计准则 | 1 |
| 质量工程 | 测试策略、CI/CD、静态分析 | 1 |
| 内存管理 | 堆栈基础、分配器、GC、引用强度等 | 14 |
| 数据结构 | 位掩码、Rope、线段树、LRU、B+ 树等 | 14 |
| 并发模式 | 信号量、RCU、SeqLock、Channel/CSP 等 | 13 |
| 系统可靠性 | 熔断器、Saga、CQRS、Event Sourcing 等 | 19 |
| 行为型模式 | 状态机、命令、策略、装饰器、Reactor 等 | 11 |
学习路径推荐
前端开发者
- 事件循环 — 理解 JavaScript 的并发模型
- 位掩码 — React Fiber 的副作用标志
- 观察者 — Redux、EventEmitter 的底层机制
- 差异/补丁 — React/ReactDOM 的协调算法
- 双缓冲 — React Fiber 的 current/workInProgress 切换
- 协作调度 — React 为什么每 5ms 让出主线程
后端/系统开发者
- 熔断器 — 微服务快速失败的保护机制
- 限流器 — 令牌桶控制吞吐量
- 预写日志 — 数据库崩溃恢复的基础
- 一致性哈希 — 分布式缓存的键分布
- 指数退避重试 — 网络请求的容错策略
- MVCC — 读写不阻塞的并发控制
- Saga 模式 — 分布式事务的补偿回滚
- 幂等键 — 重复请求安全防护
- 舱壁模式 — 资源隔离防止故障扩散
性能/底层开发者
- 内存基础知识 — 堆栈、分配器、GC
- Arena 分配器 — 批量分配与释放
- Slab 分配器 — 固定大小对象的高效复用
- 分代 GC — JVM/V8/Go 运行时的核心机制
- RCU — Linux 内核读无锁机制
- 工作窃取 — Go 运行时和 Tokio 的调度策略
- 环形缓冲区 — 无锁队列的基础
模式时间线
这些模式横跨 80 多年的计算历史。基础模式非常古老——信号量(1965)、堆(1964)、状态机(1943)已经被实战验证了 60-80 年。大多数”新”模式其实是老模式的组合:React 的协调器(2017)组合了位掩码 + 最小堆 + 协作调度 + 差异/补丁 + 双缓冲——全部发明于 1943 到 1974 年之间。
timeline
title 编程模式时间线
1943 : 状态机
1945 : 位掩码
1953 : 双缓冲
1958 : 空闲链表 / 协作调度
1960 : 环形缓冲区 / Arena / 引用计数 / 驻留
1964 : 最小堆
1965 : 信号量 / 脏标记
1966 : LRU 缓存 / 标签联合体
1967 : 虚函数表
1970 : 布隆过滤器 / B+ 树
1971 : 写时复制
1973 : Actor 模型 / 指数退避重试
1974 : 差异/补丁 / 背压
1975 : 迭代器 / 墓碑
1976 : 预写日志 / 检查点
1978 : MVCC / 逻辑时钟
1979 : 观察者 / Merkle 树
1981 : 工作窃取
1989 : 跳表
1994 : 访问者 / 对象池
1996 : LSM 树
1997 : 一致性哈希
2007 : 熔断器
如何阅读
每篇文章遵循统一结构:
- 为什么需要这个模式 — 从问题场景引入
- 现实类比 — 用日常生活的例子建立直觉
- 核心思想 — 原理讲解与 Mermaid 图
- 变体与对比 — 同类模式横向比较
- 多语言实现 — Go/TypeScript 为主,附 Rust/Python
- 生产验证 — 真实项目中的使用案例
- 小结 — 何时用、何时不用
- 参考资料 — 延伸阅读
建议先从自己领域相关的模式开始,再按兴趣向外扩展。每个模式都是独立的,不需要严格按顺序阅读。
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
部分信息可能已经过时
相关文章 智能推荐
1
Reactor 与 Proactor(Reactor / Proactor)
程序设计 同步事件分发 vs 异步完成回调——Nginx 和 Windows IOCP 的核心架构差异
2
Saga 模式(Saga Pattern)
程序设计 长事务拆分为多个本地事务 + 补偿回滚——分布式订单和跨服务事务的解决方案
3
舱壁模式(Bulkhead)
程序设计 资源隔离舱,防止故障扩散——线程池隔离和服务降级的物理保障
4
Thread-Local Storage 线程本地存储(Thread-Local Storage)
程序设计 每个线程私有数据,消除竞争——连接池、随机数生成器的基础机制
5
控制面与数据面分离(Control Plane / Data Plane)
程序设计 管理面与数据面分离——K8s、Istio、云原生架构的标配设计






