Skip to content
难度基础(★)
建议时长45分钟

2.2.2 线程的概念

本课核心知识点整理
本课核心知识点手绘流程图(SVG)

本节导学

线程是进程概念向“更细执行单位”的推进。进程负责资源边界,线程负责执行流。一个进程可以包含多个线程,这些线程共享进程提供的地址空间、代码、打开文件等资源,但每个线程必须保留自己的执行现场,否则操作系统就无法在线程之间切换。

字幕里对线程的考试重点很明确:多线程操作系统中,问“哪些资源能被线程共享,哪些不能共享”。能共享的一般是进程级资源;不能共享的一般是每条执行流独立推进所必须的现场,例如栈、寄存器、程序计数器。

进程与线程的边界

概念要点
进程资源分配的基本单位
线程进程内部的执行流
多线程一个进程中包含多个线程
线程共享同一进程内线程共享地址空间、全局数据、打开文件等
线程私有每个线程有自己的程序计数器、寄存器和栈

进程像一个资源容器,里面有代码、数据、地址空间、文件句柄等;线程像容器里的执行路径,真正按指令流往前跑。一个进程内多个线程共享同一套资源,因此线程创建和切换通常比进程轻量,线程间通信也更方便。

为什么线程需要私有现场

同一进程内的线程可以共享代码和全局变量,但不能共享“执行到哪里”和“当前调用栈是什么”。如果两个线程共用同一个程序计数器,就无法表示它们分别执行到不同位置;如果共用同一个栈,就会把彼此的函数调用、局部变量和返回地址冲乱。

因此,线程私有内容通常包括:

  • 程序计数器 PC:记录该线程下一条要执行的指令位置。
  • 寄存器现场:记录该线程被切换出去时 CPU 寄存器内容。
  • 栈:保存函数调用、返回地址、局部变量等执行上下文。

线程共享内容通常包括:

  • 代码段和程序文件。
  • 进程地址空间。
  • 全局变量和堆中的共享数据。
  • 打开的文件、部分进程级资源。

优势、代价与为什么需要同步

线程让一个进程内部可以并发处理多个任务,例如界面响应、后台计算、网络收发可以分别由不同线程执行。它比多个进程更轻量,因为不需要复制完整资源环境。

但共享也带来风险。多个线程同时修改全局变量或共享数据时,结果可能受执行时序影响,产生竞态条件。后面的 PV 操作、信号量、互斥与同步,本质上就是为了解决“共享资源如何安全使用”的问题。

高频判断表

题干关键词优先判断
资源分配、独立地址空间进程
调度、执行流、轻量级线程
地址空间、全局数据、打开文件同一进程内线程共享
程序计数器、寄存器、栈线程私有

做题路线

  1. 看到“资源分配基本单位”,选进程。
  2. 看到“CPU 调度和执行的更小单位”,选线程。
  3. 问线程共享什么,优先选代码、全局变量、地址空间、打开文件。
  4. 问线程不能共享什么,优先选程序计数器、寄存器、栈。
  5. 看到共享数据被多个线程访问,要联想到互斥和同步问题。

例题

单选
CPU 调度时更细的执行单位通常是:
单选
关于同一进程内线程的说法,正确的是:
单选
资源分配的基本单位通常是:

自查要点

  1. 为什么线程比进程轻量?
  2. 线程共享哪些资源,又保留哪些自己的现场?
  3. “调度单位”和“资源分配单位”分别是谁?