精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

线程(内核级与用户级)

考情分析

线程是进程管理的重要概念,408 真题中常以选择题形式考查线程与进程的区别、ULT 与 KLT 的特性。属于 🔥🔥 中高频考点。

一个浏览器需要同时渲染页面、下载文件、响应用户点击。如果每个任务都开一个进程,进程间通信和切换的成本太高了——线程就是为了在同一个进程内实现更轻量的并发。

为什么引入线程

进程的创建、撤销和切换都涉及资源的分配与回收,开销很大。为了减小并发执行的开销,引入了线程(Thread)——一种更轻量的执行单元。

引入线程后的分工:

概念职责
进程资源分配的基本单位(内存、文件等)
线程CPU 调度的基本单位

一个进程可以包含多个线程,这些线程共享进程的地址空间和资源,但各自有独立的栈、PC 和寄存器。

线程 vs 进程

比较维度进程线程
调度单位传统OS中是调度单位引入线程后,线程是调度单位
资源拥有拥有独立的地址空间和资源共享所属进程的资源
并发性进程间可并发同一进程内的线程也可并发
创建/切换开销大(涉及资源分配)小(共享地址空间)
通信需要 IPC 机制可直接读写共享变量
独立性相互独立同进程的线程共享资源,独立性弱

线程的属性

每个线程拥有的独立资源:

  • 线程 ID
  • 程序计数器 PC
  • 寄存器集合
  • (每个线程有自己的栈空间)

线程共享所属进程的资源:

  • 代码段
  • 数据段
  • 打开的文件
  • 堆内存
  • 全局变量

用户级线程 ULT

用户级线程(User-Level Thread)由用户空间的线程库管理,内核对线程的存在一无所知。就像公司内部的小组分工——HR 系统里只有一个"部门",部门内部谁干什么活,HR 不知道也不管。

优点缺点
线程切换不需要进入内核态,速度快一个线程阻塞 → 整个进程阻塞
可以在不支持线程的OS上实现无法利用多核CPU(内核只调度进程)
调度算法可由应用自定义

内核级线程 KLT

内核级线程(Kernel-Level Thread)由操作系统内核直接管理和调度。

优点缺点
一个线程阻塞不会导致整个进程阻塞线程切换需要进入内核态,开销较大
可以利用多核CPU并行执行创建和管理线程开销大于 ULT

内核级线程才是处理机调度的单位

只有内核级线程才能被操作系统调度到 CPU 上执行。用户级线程必须映射到内核级线程才能获得 CPU 时间。

多线程模型

模型映射关系特点
多对一多个 ULT → 1 个 KLT线程管理在用户空间,效率高;但一个阻塞全部阻塞
一对一1 个 ULT → 1 个 KLT并发性好,可利用多核;但创建线程开销大
多对多m 个 ULT → n 个 KLT(m≥n)兼顾两者优点,实现复杂

本文对应考点

  • 🔥🔥🔥 线程是 CPU 调度的基本单位,进程是资源分配的基本单位
  • 🔥🔥🔥 ULT vs KLT 的特性对比(尤其阻塞行为)
  • 🔥🔥 三种多线程模型的区别
  • 🔥🔥 线程共享哪些资源、独占哪些资源
  • 🔥 ULT 中一个线程阻塞导致整个进程阻塞的原因

有了进程和线程的概念,接下来看操作系统是如何通过原语来实际控制进程的创建、撤销和状态转换的。

真题练习