Skip to content

概念卡片:进程与线程

一句话机制:进程是操作系统资源分配的最小单位,线程是 CPU 调度执行的最小单位。 进程是「正在执行的程序」的动态实例,拥有独立地址空间;线程是进程内的执行单元,共享进程地址空间。并发是「单核时间片轮流交替」,并行是「多核真正同时」。

进程 vs 线程(完整对比)

维度进程线程
本质资源分配最小单位调度执行最小单位
地址空间独立同进程线程共享
切换开销大(上下文重)小(轻量级)
健壮性一个崩溃不波及其他一个崩溃全进程死
资源独立代码/数据空间 + 独立运行栈/PC共享代码/数据,独立运行栈/PC
并发可跨机器迁移适合 SMP 单机

根本区别只有一条:进程有独立地址空间,线程共享地址空间,其余所有差异都由它派生(速度、通信方式、同步需求)。

进程状态模型

模型状态
三态就绪 → 执行 → 阻塞
五态+ 创建(建 PCB、加载程序)、终止(回收资源)
七态+ 挂起就绪(对换到辅存)、挂起阻塞
  • 就绪:除 CPU 外资源齐备,一拿到 CPU 即执行。
  • 执行:正在 CPU 上运行(单核任意时刻只有一个)。
  • 阻塞:等待某事件(I/O),CPU 空闲也不能运行。
  • PCB(进程控制块):存放进程管理与控制信息的数据结构,是进程存在的唯一标志。

进程调度算法

算法思路特点
FCFS 先来先服务按进入就绪队列顺序简单,对短作业不友好
SJF 短作业优先选估计运行时间最短的照顾短作业、饿死长作业
RR 时间片轮转每个进程分配一个时间片最公平、最常用
多级反馈队列多队列 + 优先级 + 时间片兼顾高优先级响应与短作业,UNIX 采用
优先级调度按优先级执行,同级 FCFS可能低优先级饿死

为什么有了进程还要线程?

进程隔离性好但切换开销大、并发粒度粗。线程共享地址空间,切换/通信快、资源利用率高,适合同一任务内的并发(如 Web 服务器一个请求一个线程)。

不变量(必须成立的约束)

  • 进程 = 资源单位,线程 = 调度单位;线程不能独立执行,必须依附进程。
  • 同进程线程共享地址空间,因此用公共变量必须同步;进程间地址空间隔离,天然无需同步。
  • 单核任意时刻只有一个进程处于执行态。

常见误解

  • 以为「线程比进程快就一定更好」→ 线程崩溃拖垮全进程,隔离性场景必须用进程。
  • 以为「并发和并行是一回事」→ 并发是时间片交替(逻辑同时),并行是多核真同时。
  • 以为「程序 = 进程」→ 程序是静态文本,进程是动态执行实例,二者非一一对应。

关联

最近更新