线程可以简单地理解为「轻量级进程」,是一个基本的 CPU 执行单元。引入线程是为了减少程序执行时的时空开销。
组成
- 线程 ID
- 程序计数器
- 寄存器集合
- 堆栈
基本状态
- 就绪
- 阻塞
- 运行
进程与线程的区别
- 调度:线程是独立调度的基本单位;进程是拥有资源的基本单位。线程切换时不会引起进程切换,同进程内线程切换开销很小
- 拥有资源:进程是拥有资源的基本单位,线程不拥有系统资源(仅一点必不可少的资源),同一进程的各线程共享进程资源
- 并发性:同一进程或不同进程内的线程都可以并发执行,并发度更高
- 系统开销:创建/撤销/切换线程的开销比进程小
- 地址空间和其他资源:进程的地址空间之间相互独立,同进程的各线程共享进程资源,某进程内的线程对其他进程不可见
- 通信:进程间通信(IPC)需要进程同步和互斥手段辅助;同进程内的线程通信可直接通过共享空间
线程的属性
- 线程是轻型实体,拥有唯一标识符和线程控制块(记录寄存器和栈等现场状态)
- 不同线程可以执行相同的程序
- 同一进程的各个线程共享该进程的资源
- 线程是处理机的独立调度单位,多线程可并发执行
线程的实现方式
- 用户级线程(User-Level Thread, ULT)
- 内核级线程(Kernel-Level Thread, KLT)
多线程模型
| 模型 | 映射关系 | 特点 |
|---|---|---|
| 多对一模型 | 多个用户级线程 → 一个内核级线程 | 开销小,但一个线程阻塞则整个进程阻塞 |
| 一对一模型 | 每个用户级线程 → 一个内核级线程 | 并发能力强,开销较大 |
| 多对多模型 | N 个用户级线程 → M 个内核级线程(N ≥ M) | 折中方案 |