线程可以简单地理解为「轻量级进程」,是一个基本的 CPU 执行单元。引入线程是为了减少程序执行时的时空开销。

组成

  • 线程 ID
  • 程序计数器
  • 寄存器集合
  • 堆栈

基本状态

  • 就绪
  • 阻塞
  • 运行

进程与线程的区别

  • 调度:线程是独立调度的基本单位;进程是拥有资源的基本单位。线程切换时不会引起进程切换,同进程内线程切换开销很小
  • 拥有资源:进程是拥有资源的基本单位,线程不拥有系统资源(仅一点必不可少的资源),同一进程的各线程共享进程资源
  • 并发性:同一进程或不同进程内的线程都可以并发执行,并发度更高
  • 系统开销:创建/撤销/切换线程的开销比进程小
  • 地址空间和其他资源:进程的地址空间之间相互独立,同进程的各线程共享进程资源,某进程内的线程对其他进程不可见
  • 通信:进程间通信(IPC)需要进程同步和互斥手段辅助;同进程内的线程通信可直接通过共享空间

线程的属性

  • 线程是轻型实体,拥有唯一标识符和线程控制块(记录寄存器和栈等现场状态)
  • 不同线程可以执行相同的程序
  • 同一进程的各个线程共享该进程的资源
  • 线程是处理机的独立调度单位,多线程可并发执行

线程的实现方式

  • 用户级线程(User-Level Thread, ULT)
  • 内核级线程(Kernel-Level Thread, KLT)

多线程模型

模型映射关系特点
多对一模型多个用户级线程 → 一个内核级线程开销小,但一个线程阻塞则整个进程阻塞
一对一模型每个用户级线程 → 一个内核级线程并发能力强,开销较大
多对多模型N 个用户级线程 → M 个内核级线程(N ≥ M)折中方案