线程实现与多线程模型
用户级线程
- 历史背景: 早期操作系统(如Unix)只支持进程,线程由线程库实现
- 实现原理: 通过循环结构(如while)和条件判断实现线程调度
- 管理主体: 所有管理工作由应用程序通过线程库完成
- 切换机制: 线程切换完全在用户态下完成
- 优点:
- 线程切换在用户空间完成,系统开销小
- 线程管理简单,不需要操作系统介入
- 缺点:
- 一个线程被阻塞会导致整个进程阻塞
- 无法在多核CPU上并行执行多个线程
内核级线程
- 基本概念: 由操作系统直接支持,OS为每个线程建立TCB
- 管理主体: 所有管理工作由操作系统内核完成
- 切换机制: 必须切换到核心态,需要OS介入
- 优点:
- 一个线程阻塞不会影响其他线程
- 可在多核CPU上并行执行
- 线程成为CPU调度的基本单位
- 缺点:
- 线程管理需要频繁切换CPU状态,开销大
- 系统管理成本高(需要为每个线程维护TCB)
一对一模型
- 映射关系: 每个用户级线程对应一个内核级线程
- 优点:
- 并发能力强(一个线程阻塞不影响其他线程)
- 可多核并行执行
- 缺点:
- 管理开销大(每个用户线程都需要内核线程支持)
- 创建线程数受限于操作系统
多对一模型
- 映射关系: 多个用户级线程映射到一个内核级线程
- 特点: 等同于纯用户级线程实现方式
- 优点:
- 缺点:
- 一个线程阻塞会导致整个进程阻塞
- 无法利用多核CPU并行执行
多对多模型
- 映射关系: n个用户级线程映射到m个内核级线程(n ≥ m)
- 优点:
- 克服多对一模型并发度不高的问题
- 克服一对一模型开销大的问题
- 灵活性:
- 进程状态:
卡片 1/5