第 0 章配套代码索引
这些是教学用的模拟程序,不是生产代码,也不是完整工程。 目的只有一个:把第 0 章里那些「听起来抽象」的结论,变成你能亲眼看到的数字。
一、文件清单
| 文件 | 对应小节 | 这段代码演示什么 | 运行时长 |
|---|---|---|---|
| 01-three-kinds-of-problems.md | 0.1 三类问题 | 同一个函数在「无竞争 / 有竞争 / 有分配压力」下的耗时差异 | < 5 s |
| 03-latency-distribution.md | 0.3 延迟是分布 | 均值如何骗人;尾延迟跨服务放大;百分位不能直接平均 | < 5 s |
| 04-littles-law.md | 0.4 Little’s Law | 用 QPS 与延迟算资源需求;按平均值配置资源的危险 | < 1 s |
| 05-queueing.md | 0.5 利用率与排队 | M/M/1 模拟:利用率 50%→95% 时排队时间的非线性爆炸 | < 10 s |
| 06-coordinated-omission.md | 0.6 协调遗漏 | 闭环 vs 开环压测:同一个服务,P99 差 100 倍 | < 5 s |
| 10-lab0.md | 0.10 Lab 0 | 死代码消除、常量折叠、预热曲线 | < 5 s |
没有代码的小节:0.2(三方权衡)、0.7(谬误清单)、0.8(闭环)、0.9(C++ 直觉对照)——这四节是观念性的,不需要模拟。
二、怎么运行
这些程序都是单文件 main 函数。放在本仓库的 src/main/kotlin/lesson00/ 下即可。
# 方式一:在 IDE 里直接点 main 函数旁边的绿色三角
# 方式二:命令行编译运行
./gradlew build
java -cp build/classes/kotlin/main lesson00.LatencyDistributionKt
如果想用 ./gradlew run,需要在 build.gradle.kts 里加 application 插件并指定 mainClass(本仓库目前没有,建议用上面两种方式)。
三、阅读这些代码的建议
- 先猜再看:读代码之前,先猜一下输出会是什么样。猜错的地方就是你真正需要学习的地方。
- 改参数再跑:把「1% 的慢请求」改成「5%」,把「10 个下游」改成「3 个」,观察结果怎么变。参数的敏感性比默认输出更有教学价值。
- 不要纠结精度:这些都是随机模拟,每次运行的数字会有小幅波动。看的是量级和趋势,不是小数点后两位。
- 注意代码里的注释:每个
// 关键点注释都对应正文里的一个结论。
四、重要提醒
这些程序里的数字不能用来做任何工程决策——它们运行在你的开发机上、单进程、没有网络、没有数据库。
它们唯一的作用是:帮你在脑子里建立一个「这样做会出问题」的直觉。真正的测量从第 2 章开始。