线程的属性
引入线程后,进程的内涵发生了改变,进程只作为除 CPU 外的系统资源的分配单元,而线程则作为 CPU 的分配单元。
进程是系统中拥有资源的基本单位,而线程不拥有系统资源,但线程可以访问其隶属进程的资源。
线程支持多处理器系统:单线程进程只能运行在一个 CPU 上,而多线程进程,可以将多个线程分配到多个 CPU 上运行。
线程有执行态;就绪态;阻塞态三种状态。
线程的实现方式
内核级线程
优点
- 能发挥多 CPU 的优势
- 如果进程中的一个线程被阻塞,可以调度其他线程占用 CPU,也可以运行其他进程的线程
- 内核支持线程具有很小的数据结构和堆栈,线程切换快
- 内核本身也可以使用多线程技术,提高系统执行速度和效率
缺点
- 线程切换需要从用户态转换到核心态,系统开销大
用户级线程
优点
- 线程切换不需要切换到内核空间
- 不同的进程可以使用适合自己的线程调度算法
- 用户可以自己实现进程管理
缺点
- 系统调用时会发生阻塞,阻塞时该进程的所有线程都被阻塞
- 不能发挥多 CPU 的优势
组合式线程
优点
缺点
没有缺点,很完美
多线程模型
多对一模型
优点
- 线程管理在用户空间进行,无需切换到内核态,效率高
缺点
- 一个线程阻塞,那么整个进程都会被阻塞
一对一模型
优点
- 一个线程阻塞后,可以调度另一个线程运行,并发能力强
缺点
- 每创建一个用户线程要对应创建一个内核线程,开销较大
多对多模型
优点
缺点
没有缺点
硬件多线程
硬件多线程在一个核中处理多个线程,可用于单核处理器。
硬件级多线程有三种实现方式:细粒度多线程、粗粒度多线程和同时多线程 SMT。