线程实现与多线程模型

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