首页/操作系统/进程管理/用户级线程与内核级线程 🔗 在 Obsidian 中打开
操作系统 · 进程管理 · 线程模型

用户级线程与内核级线程

重要度 ★★★★ 用户级线程内核级线程ULTKLT线程模型
速查
用户级线程(ULT)由用户空间线程库管理、内核不可见,切换快但一个阻塞会连带整个进程;内核级线程(KLT)由内核管理、是 CPU 调度基本单位,可并行但开销大。映射模型:多对一 / 一对一 / 多对多。

核心概念

用户级线程(ULT)

  • 由用户空间的线程库(如 POSIX pthreads)管理,内核不知道 ULT 的存在;
  • 线程的创建、销毁、同步、调度都在用户空间完成,不需要模式切换;
  • 一个 ULT 阻塞会导致整个进程阻塞(内核只看到一个进程);
  • 无法利用多核并行(内核把整个进程调度到一个 CPU 上)。

内核级线程(KLT)

  • 由操作系统内核管理和调度;
  • 线程的创建、销毁、同步需要系统调用,开销比 ULT 大;
  • 一个 KLT 阻塞不影响其他 KLT(内核可调度同进程的其他 KLT);
  • 可以利用多核并行。

映射模型

  1. 多对一:多个 ULT 映射到一个 KLT。ULT 切换快,但一个 ULT 阻塞全进程阻塞。
  2. 一对一:每个 ULT 对应一个 KLT。性能好、可并行,但创建线程开销大(Linux、Windows 采用)。
  3. 多对多:n 个 ULT 映射到 m 个 KLT($n \geq m$)。兼顾灵活性和性能。

关键性质

对比项用户级线程 (ULT)内核级线程 (KLT)
管理者用户空间线程库操作系统内核
内核可见性不可见可见
调度方式用户态调度,不需系统调用内核态调度,需系统调用
切换速度快(用户态完成)慢(需模式切换)
阻塞影响一个 ULT 阻塞 → 整个进程阻塞仅阻塞该 KLT
多核利用不能
典型实现Green Thread、早期 Java 线程Linux pthread、Windows 线程

常见考法

考法解题套路
ULT vs KLTULT 快但会连带阻塞,KLT 可并行但开销大
一对一模型现代 OS 主流(Linux / Windows),每个 ULT 配一个 KLT
ULT 阻塞问题ULT 阻塞 → 内核认为整个进程阻塞 → 调度另一进程 → 其他 ULT 也无法运行
多对多模型n 个 ULT 映射 m 个 KLT,兼顾灵活性(ULT 切换快)和并行性(KLT 可并行)

易错点

必记
  1. ⚠️ ULT 的切换在用户态完成,不需要模式切换;KLT 的切换需要模式切换
  2. ⚠️ ULT 对内核不可见是其最大缺点——一个 ULT 阻塞会连带整个进程阻塞。
  3. ⚠️ 现代操作系统(Linux、Windows)都采用一对一模型。
  4. ⚠️ 多对一模型只有 ULT 切换快这一个优点,其他全是缺点。
  5. ⚠️ 线程库(如 pthread)可以同时管理 ULT 和 KLT——它们不是互斥的概念。

记忆卡片

ULT 的核心优缺点?
优点:切换快(用户态完成);缺点:一个 ULT 阻塞→整个进程阻塞,无法多核并行。
现代 OS 采用什么模型?
一对一模型(每个 ULT 对应一个 KLT),如 Linux pthread、Windows 线程。
为什么 ULT 阻塞会牵连进程?
ULT 对内核不可见,内核只看到一个执行流(进程),一个阻塞就调度走整个进程。
多对多模型的映射?
n 个 ULT 映射 m 个 KLT($n \geq m$),兼顾 ULT 切换速度与 KLT 并行能力。

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

用户级线程 (ULT) 内核级线程 (KLT) ULT1 ULT2 ULT3 KLT ULT1 ULT2 ULT3 KLT1 KLT2 KLT3 ULT1 ULT2 ULT3 ULT4 KLT1 KLT2
点击上方按钮,查看 ULT 与 KLT 的三种映射关系。
提示:现代 Linux / Windows 采用一对一模型。
示意图:左为用户级线程池,右为内核级线程;橙色流动线表示映射关系。

相关知识点

process-and-thread thread-model

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