首页/操作系统/02-process/线程模型 🔗 在 Obsidian 中打开
操作系统 · 02-process

线程模型

重要度 ★★★★★ 用户级线程内核级线程多对一一对一多对多
速查
线程是CPU调度的基本单位,进程仍是资源分配的基本单位。多线程模型:多对一快但不并行且阻塞连带;一对一并行且独立但开销大;多对多折中但实现复杂。

速查

项目
核心概念线程模型
关键性质多对一:快但不并行且阻塞连带;一对一:并行且独立但开销大;多对多:折中但实现复杂
考试频率⭐⭐⭐⭐

核心概念

线程是CPU调度的基本单位,是进程中的一个执行流。引入线程的目的是减少程序并发执行时的开销,提高系统性能。

线程与进程的对比

特性进程线程
调度单位传统上是进程,现代OS是线程CPU调度的基本单位
资源分配资源分配的基本单位不拥有资源,共享进程资源
地址空间独立地址空间共享进程地址空间
切换开销大(保存PCB、页表等)小(保存少量寄存器)
通信方式IPC(管道、消息队列等)直接读写共享变量
并发性进程间并发线程间并发,粒度更细

二、用户级线程(ULT)

  • 在用户空间实现,内核不知道线程的存在
  • 线程切换不需要模式切换(用户态→内核态)
  • 一个线程阻塞会导致整个进程阻塞
  • 无法利用多核CPU

三、内核级线程(KLT)

  • 由内核管理,为每个线程维护 TCB
  • 线程切换需要模式切换
  • 一个线程阻塞不影响同进程的其他线程
  • 可在多核CPU上真正并行执行

四、多线程模型

  • 多对一:多个 ULT 映射到一个 KLT(阻塞连带、不能并行)
  • 一对一:每个 ULT 对应一个 KLT(可并行,开销大;Linux/Windows 采用)
  • 多对多:n 个 ULT 映射到 m 个 KLT($N \geq M$)

关键性质

模型用户级线程内核级线程阻塞影响多核利用
多对一多个1个整个进程不能
一对一N个N个仅该线程
多对多N个M个($N \geq M$)仅该线程

常见考法

考法解题套路
ULT vs KLTULT 快但会连带阻塞,KLT 可并行但开销大
一对一模型现代OS主流(Linux/Windows),每个ULT配一个KLT
多对多模型n个ULT映射m个KLT,兼顾灵活性与并行性
线程状态转换创建→就绪⇄运行→终止,与进程类似但更频繁

易错点

注意
  • 线程是CPU调度基本单位,进程仍是资源分配基本单位
  • ULT 对内核不可见,一个 ULT 阻塞会连带整个进程阻塞
  • ULT 无法利用多核——内核只分配一个执行流
  • 现代OS(Linux、Windows)均采用一对一模型
  • 多对多模型中 $N \geq M$:ULT 数 ≥ KLT 数

核心结论

必背
  1. 线程是CPU调度基本单位,进程是资源分配基本单位
  2. ULT 切换快但阻塞连带;KLT 可并行但开销大
  3. 多对一快但不并行;一对一并行但开销大;多对多折中
  4. 现代OS主流是一对一模型
  5. 线程共享进程地址空间,需要互斥/同步机制保护

记忆卡片

ULT 与 KLT 的核心区别?
ULT 在用户空间管理,内核不可见,切换快但一个阻塞全阻塞;KLT 由内核管理,切换慢但可并行且阻塞独立。
三种映射模型的优缺点?
多对一快但不并行且阻塞连带;一对一并行且独立但开销大;多对多折中但实现复杂。
CPU调度和资源分配的基本单位?
线程是CPU调度基本单位,进程仍是资源分配基本单位。
为什么 ULT 不能利用多核?
内核只看到一个进程(一个KLT),只能分配一个CPU核心,ULT 在用户空间轮转。
现代OS采用哪种模型?
一对一模型(每个 ULT 配一个 KLT),如 Linux pthread、Windows 线程。

交互动画 · 三种多线程映射模型

用户级线程(ULT) → 内核级线程(KLT)
点击三种模型按钮,观察 ULT 与 KLT 的映射关系
ULT 在用户空间;KLT 由内核调度——映射方式决定并行性与阻塞传播
多对一:一个 ULT 阻塞→整个进程阻塞;一对一/多对多:仅阻塞该线程。

相关知识点

process-and-thread fork-system-call

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。