cross - core - map

跨学科速查:一段程序背后的四大件

这份速查用一个通用问题把四科串起来:一段程序从输入到输出,底层发生了什么?

一次请求的跨学科生命周期

1. 总流程

输入进入系统
-> 数据按编码规则变成 bit
-> 数据放入内存、文件或网络缓冲区
-> CPU 按指令读取、计算、写回
-> 数据结构组织中间状态
-> 操作系统调度进程/线程并管理内存和 IO
-> 如果需要跨机器通信,网络协议负责寻址、传输、可靠性
-> 输出被写回文件、屏幕、网络或其他设备

2. 每一步对应哪门课

阶段主要学科关键知识
信息变成 bit组成原理二进制、补码、浮点、字符编码
bit 被解释成数据组成原理 + 数据结构类型、布局、数组、记录、对象
数据被组织起来数据结构数组、链表、栈、队列、哈希、树、图
指令被执行组成原理取指、译码、执行、寄存器、ALU
程序获得资源操作系统进程、线程、虚拟内存、文件、系统调用
多任务同时推进操作系统调度、同步、互斥、死锁、上下文切换
数据跨机器移动计算机网络IP、端口、TCP、UDP、DNS、HTTP、TLS
稳定性和性能四科共同复杂度、局部性、缓存、重传、阻塞、排队

3. 常见问题反查

现象先查再查
结果溢出或精度异常整数位宽、补码、浮点表示类型转换、舍入、边界输入
查找或排序太慢数据结构、算法复杂度内存局部性、缓存命中
程序卡住线程状态、锁、阻塞 IO调度、死锁、资源耗尽
内存不够虚拟内存、堆/栈、对象数量页缓存、缺页、swap
文件读写慢文件系统、页缓存、磁盘 IO缓冲策略、同步刷盘
网络连接失败DNS、IP、端口、TCP 握手防火墙、路由、协议不匹配
网络传输慢RTT、带宽、丢包、重传拥塞控制、应用层排队
并发结果偶发错误原子性、可见性、竞态条件锁粒度、内存模型
大量任务排队队列、调度、吞吐/延迟生产消费速度差、资源瓶颈

4. 四大件的底层依赖关系

组成原理提供硬件事实:
位、字节、指令、寄存器、CPU、Cache、内存、总线、设备

操作系统把硬件包装成抽象:
进程、线程、虚拟内存、文件、Socket、系统调用、权限

数据结构在抽象之上组织信息:
数组、链表、栈、队列、哈希、树、图、堆、位图

计算机网络让不同主机上的进程通信:
寻址、路由、传输、可靠性、拥塞控制、应用协议、安全

5. 学习时的 first-principles 问法

遇到任何知识点,按这 5 个问题拆:

  1. 它管理的资源是什么?CPU、内存、磁盘、网络、时间、状态?
  2. 它提供的抽象是什么?变量、数组、文件、进程、Socket、报文?
  3. 它的成本在哪里?计算、存储、复制、切换、等待、通信?
  4. 它的边界条件是什么?容量、并发、失败、恶意输入、极端规模?
  5. 它和其他层如何交互?上层依赖它什么,它又依赖下层什么?

延伸阅读