1. 线程和进程

1.1 线程定义

image.png
进程(process)具有两大特点:

  • 资源所有权: 进程包含存放进程映像的虚拟地址空间
  • 调度/执行: 进程具有执行状态和优先级,是可被系统调度与分派的实体

通常把调度/执行的基本单位称为线程,拥有资源所有权的基本单位称为进程

1.2 多线程

操作系统在单个进程中支持多个并发执行路径的能力叫做多线程(multithreading)
image.png
区别并发(concurrency)和并行(parallelism)

  • 并发:能够处理多个任务的能力,没有要求同时处理
  • 并行:强调能够同时处理多个任务,并行是并发的子集

    1.3 线程&进程

    | | 进程 | 线程 | | —- | :—-: | :—-: | | 关联属性 |
    - 存放映像的虚拟地址空间
    - 对处理器,其他进程,文件和IO资源的受保护访问
    |
    - 线程执行状态
    - 未运行线程的上下文
    - 执行栈
    - 存放局部变量的静态存储空间
    - 与其他进程内线程共享的内存和资源访问
    | | 进程管理 |
    - 进程只有一个相关的控制块和地址空间
    - 进程运行时,CPU寄存器被进程控制
    - 未运行时,保存寄存器中内容
    image.png |
    - 每个线程有单独的栈和控制块,其中包含寄存器值,优先级等线程相关属性
    - 进程中所有线程共享进程的状态和资源
    image.png |

2. 线程特点

2.1 线程功能

  • 派生(spawn):派生新进程同时派生一个线程,线程可在进程中继续派生线程,新线程放在就绪队列中
  • 阻塞/解除阻塞:当前线程发送等待,处理器执行另一个就绪进程,当事件发生,线程重新入队
  • 结束:线程完成后,释放其寄存器上下文和栈

    2.2 线程优点

  • 线程创建更快速

  • 终止线程更快速
  • 线程切换更快速
  • 同进程中线程的通信效率高于独立进程通信效率

    2.3 线程分类

    | 用户级线程(User-Level Thread, ULT) | 内核级线程(Kernel-Level Thread, KLT) | | :—-: | :—-: | | 管理线程的所有工作都由应用程序完成,内核意识不到线程的存在
    image.png | 管理线程的工作由内核完成,
    image.png | | ULT对比KLT | | | ULT优点
    - 线程的管理切换无需特权
  • 调度算法可根据程序调整
  • ULT可在任何OS运行,依靠应用层级的线程库,无需底层内核支持

ULT缺点
- ULT在执行系统调用时,除了阻塞线程,还会阻塞进程中所有线程

  • 纯ULT中,无法使用多处理技术,内核一次只能给一个进程分配一个处理器 | |