第2章 进程、线程与调度¶
CPU 在任一核心上只能执行一条指令流,但用户同时运行编辑器、浏览器、编译器和后台服务。进程与线程把执行状态组织成可管理对象,调度器则决定有限 CPU 时间怎样在这些对象之间分配。
本章的核心矛盾¶
交互程序希望快速响应,批处理程序希望高吞吐,实时任务关心截止期限,多核系统还关心缓存局部性和负载均衡。不存在对所有目标都最优的调度策略。
小结目录¶
- 进程、线程与上下文切换:解释地址空间、内核对象、用户线程与内核线程的关系,以及上下文切换究竟保存什么。
- 生命周期、调度与进程间通信:从状态机出发讨论创建、等待、退出、常见调度算法和 IPC 选择。
学完应能回答¶
- 程序、进程、线程分别是什么?
- 线程切换为什么通常比进程切换轻,但仍不是免费操作?
- 周转时间、响应时间、等待时间和吞吐量为何不能同时最优?
fork、exec、wait在进程生命周期中各做什么?- 管道、共享内存和消息传递分别适合什么情形?
与并发章节的连接¶
调度器可能在几乎任意可抢占点切换线程,所以一段“看起来连续”的源代码并不一定原子执行。下一章的竞态、锁和条件变量,正是为了在不可预测的交错执行中维护不变量。