Skip to content

进程与线程基础

进程(Process)是操作系统资源分配和保护的基本单位线程(Thread)CPU 调度和执行的基本单位——这是并发编程绕不开的最底层抽象。一个程序(磁盘上的可执行文件)被装入内存运行后就成了进程;而一个进程内部可以切分出多个线程,它们共享同一份地址空间与资源,却能各自独立地在 CPU 上执行。理解"程序 vs 进程"、"进程 vs 线程"的区别,是写出高并发、低开销、可维护程序的前提——不区分进程与线程就上锁、不懂得上下文切换代价就乱切线程、不清楚 fork/exec 就排查不了僵尸/孤儿,几乎是后端与服务端 bug 的第一源头。

进程与线程基础的全部考点围绕三组对立概念展开:①程序 vs 进程——静态的磁盘文件 vs 动态的运行实例(进程有 PCB、有地址空间、有生命周期);②进程 vs 线程——重资源单位(独立内存/打开文件表/独立崩溃)vs 轻执行单位(共享地址空间/廉价切换/同崩同亡);③用户级 vs 内核级线程——对内核是否可见、能否真正并行(一对一/多对一/多对多模型)。本叶把这些概念串成进程状态机(就绪↔运行→阻塞)+ PCB + 上下文切换代价 + 线程模型 + fork/exec/wait + 僵尸/孤儿的完整链条,是面试中排名第一的 OS 高频题。

评价

优点

  • 并发抽象:进程/线程让多个执行流"同时"推进,单核也能并发(时间片轮转),多核才能真并行
  • 资源隔离(进程):独立地址空间 + 权限控制,一个进程崩溃不影响其他进程——这是服务隔离、浏览器多进程架构的基础
  • 轻量切换(线程):线程共享地址空间,切换只需保存寄存器与栈指针(纳秒~微秒级),远比进程切换(要换页表/flush TLB)便宜
  • 简化模型:开发者面对的是"顺序执行"的线程流,由 OS 负责调度切换,无需手写状态机管理异步

缺点

  • 上下文切换有代价:进程切换涉及 TLB flush 等约数微秒;线程虽轻但频繁切换仍是性能损耗,过度多线程反而变慢
  • 并发 bug 难调:多线程共享内存带来竞态、死锁、内存可见性三大难题,是 bug 重灾区
  • 进程开销大:创建进程要复制地址空间(即使 COW 也有开销)、占用内存多;进程间通信(IPC)比线程间共享复杂
  • 僵尸/孤儿处理:父进程不 wait 会留下僵尸进程占 PID,进程异常退出产生孤儿需 init 回收——管理不当会拖垮系统

本叶地图

  • 入门 —— 程序 vs 进程、PCB 与状态机、上下文切换代价、线程概念、用户级 vs 内核级线程
  • 进程生命周期与 PCB —— 进程状态转换图、PCB 内容、fork/exec/wait、僵尸与孤儿进程、上下文切换全过程与代价
  • 线程:轻量级进程与多线程模型 —— 线程定义与 TCB、用户级 vs 内核级线程、多对一/一对一/多对多模型、进程 vs 线程对比
  • 参考 —— 状态转换表、PCB/TCB 内容表、进程 vs 线程对比大表、各语言线程模型、易错点

幻灯片地址

进程与线程基础

测试题

进程与线程基础测试题