看见世界
计算机系统:一次只钻一块
不是「内存管理」「网络」,而是「TLB miss 和缺页差在哪」「首字节之前来回跑了几趟」——一份只钻一块,钻到你说得出数量级。
怎么用
这一批是学习型的:它会引导你,不会追到你说不出话为止。卡住时它先问你卡在哪一层(没听过 / 知道但不明白为什么 / 明白但用不上),再决定给什么;同一个点引导两次还不通才直接讲,讲完要你用自己的话复述一遍。
它会一直逼你算数:答「有开销」「比较快」会被打断。说得出结论说不出数字,就是背的 —— 这批练的就是这个。
怎么开始
- 挑一份,点开它,把提示词复制走。
- 新开一个空对话贴进去,什么都别说,等它问第一个问题。
- 准备好被追问数量级:几纳秒、几微秒、差几倍。答不上来就说不知道,它会记一笔然后继续。
中途随时能喊的四个口令
跳过立刻进下一幕换个说法这一处换个角度再讲一遍直说吧讲完整答案,然后要我复述复盘立刻跳到收尾,输出复盘卡片
三条坑
- 末尾的底牌别自己先读 —— 那一栏「常见的想错」写的就是每一问的答案。
- 别急着抛名词。说出「这是 TLB miss」很容易,说出它比缺页快多少才算会。
- 它开始夸你的时候,提醒它看「不许夸我」那条。引导不等于哄。
想补数量级感先做「随机读」和「首字节」;线上排查用得上的是「malloc」「TCP 卡住」「上下文切换」;写多线程代码做「重排序」和「伪共享」。
内存
一次内存读,硬件走了几步
一次普通的内存读,硬件到底走了几步?
malloc 返回之后,内存就归你了吗
8GB 的机器上 malloc(4GB) 两次,会成功吗?
mmap 省掉的到底是哪一次拷贝
「mmap 是零拷贝所以更快」——省的是哪一次,代价换到哪去了?
并发
重排序,是编译器干的还是 CPU 干的
你说的重排序,是编译器干的还是 CPU 干的?
改的是不同的变量,为什么互相拖慢
8 个线程各改各的计数器,为什么比单线程还慢?
一次上下文切换,贵在哪
切换的成本主要不是保存寄存器 —— 那是什么?