线程的属性

引入线程后,进程的内涵发生了改变,进程只作为除 CPU 外的系统资源的分配单元,而线程则作为 CPU 的分配单元

进程是系统中拥有资源的基本单位,而线程不拥有系统资源,但线程可以访问其隶属进程的资源。

线程支持多处理器系统:单线程进程只能运行在一个 CPU 上,而多线程进程,可以将多个线程分配到多个 CPU 上运行。

线程有执行态;就绪态;阻塞态三种状态。

线程的实现方式

内核级线程

优点

  1. 能发挥多 CPU 的优势
  2. 如果进程中的一个线程被阻塞,可以调度其他线程占用 CPU,也可以运行其他进程的线程
  3. 内核支持线程具有很小的数据结构和堆栈,线程切换快
  4. 内核本身也可以使用多线程技术,提高系统执行速度和效率

缺点

  1. 线程切换需要从用户态转换到核心态,系统开销大

用户级线程

优点

  1. 线程切换不需要切换到内核空间
  2. 不同的进程可以使用适合自己的线程调度算法
  3. 用户可以自己实现进程管理

缺点

  1. 系统调用时会发生阻塞,阻塞时该进程的所有线程都被阻塞
  2. 不能发挥多 CPU 的优势

组合式线程

优点

内核级线程用户级线程 的所有优点

缺点

没有缺点,很完美

多线程模型

多对一模型

优点

  1. 线程管理在用户空间进行,无需切换到内核态,效率高

缺点

  1. 一个线程阻塞,那么整个进程都会被阻塞

一对一模型

优点

  1. 一个线程阻塞后,可以调度另一个线程运行,并发能力强

缺点

  1. 每创建一个用户线程要对应创建一个内核线程,开销较大

多对多模型

优点

结合了 多对一模型一对一模型 的优点

缺点

没有缺点

硬件多线程

硬件多线程在一个核中处理多个线程,可用于单核处理器。

硬件级多线程有三种实现方式:细粒度多线程、粗粒度多线程和同时多线程 SMT。