操作系统(5)第二章- 线程
·
一、线程的概念

线程(Thread) 是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运行单位。
- 一个进程至少包含一个主线程,可以创建多个子线程。
- 同一进程内的所有线程共享该进程的内存地址空间、文件句柄、全局变量等资源。
- 线程自己只拥有少量私有资源:程序计数器、寄存器、栈、线程私有数据等。
简单理解:
- 进程 = 程序运行的容器(独立资源)
- 线程 = 容器里真正干活的执行流

二、线程的主要特点

-
轻型实体线程几乎不拥有独立系统资源,只保留少量运行必需信息,创建、销毁、切换开销远小于进程。
-
独立调度与分派线程是 CPU 调度的基本单位,多线程可在多核 CPU 上真正并行执行。
-
并发执行同一进程内多个线程可交替执行,实现并发,提高程序响应速度和吞吐量。
-
共享进程资源同一进程内线程共享:
- 代码段、数据段、堆空间
- 打开的文件、信号处理、进程 ID 等线程间通信成本极低,无需复杂进程间通信(IPC)。
-
私有栈空间每个线程有独立栈,用于保存局部变量、函数调用栈,互不干扰。
-
进程崩溃会导致所有线程终止线程依赖进程存在,进程退出,所有线程都会被销毁。
三、线程 vs 进程(简要对比)
| 特性 | 进程 | 线程 |
|---|---|---|
| 资源拥有 | 独立资源,相互隔离 | 共享进程资源 |
| 调度单位 | 传统 OS 调度单位 | 现代 OS 最小调度单位 |
| 切换开销 | 大 | 小 |
| 通信方式 | 管道、消息队列、共享内存等 | 直接读写共享变量 |
| 健壮性 | 一个崩溃不影响其他进程 | 一个线程崩溃可能导致整个进程崩 |
四、线程的主要作用
- 提高程序并发能力,充分利用多核 CPU
- 提升响应速度(如 UI 线程 + 后台工作线程)
- 减少阻塞等待浪费(I/O 时可让其他线程继续执行)
- 简化程序结构,模块化处理多任务
线程的实现方式 & 多线程模型
一、线程的三种实现方式
从操作系统层面,线程主要分为三类实现:
1. 内核级线程(KLT,Kernel-Level Thread)

- 由操作系统内核直接管理、调度
- 内核负责创建、销毁、切换线程
- 优点:
- 多核 CPU 上可真正并行
- 一个线程阻塞,其他线程仍可运行
- 缺点:
- 线程切换、创建开销较大
- 需要内核态 / 用户态切换
典型:Windows 线程、Linux POSIX 线程(pthread)
2. 用户级线程(ULT,User-Level Thread)

- 在用户空间实现,内核完全不知道线程存在
- 由用户态线程库(如 Green Thread)管理调度
- 优点:
- 线程切换极快,无内核态开销
- 可自定义调度算法
- 缺点:
- 一个线程阻塞(如 I/O)会导致整个进程阻塞
- 无法利用多核并行
3. 混合型线程(轻量级进程 + 用户线程)
- 用户线程绑定到轻量级进程 LWP
- LWP 再由内核调度
- 兼顾:
- 用户线程切换快
- 内核可调度、支持多核、不全局阻塞
典型:Solaris 线程、早期 Java 线程模型
二、多线程模型(线程映射关系)
指用户线程与内核线程之间的对应关系。
1. 多对一模型(Many-to-One)

- 多个用户线程 → 1 个内核线程
- 调度在用户空间完成
- 优点:高效、切换快
- 缺点:一个线程阻塞则全部阻塞,无法多核并行
2. 一对一模型(One-to-One)

- 1 个用户线程 → 1 个内核线程
- 目前主流操作系统(Linux/Windows)采用
- 优点:
- 真正并行
- 线程独立,互不阻塞
- 缺点:线程创建 / 切换开销稍大
3. 多对多模型(Many-to-Many)

- n 个用户线程 → m 个内核线程(n ≥ m)
- 兼顾并行性与效率
- 优点:
- 不会因一个线程阻塞全部
- 可充分利用多核
- 缺点:实现复杂
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)