线程

  • 线程
    • 定义
      • 线程是进程中的一个可执行实体,表示进程的子任务。
      • OS 以进程为单位分配资源,以线程为单位调度。
    • 组成
      • 每个线程有一个 TCB,类似 PCB。
      • 线程标识符
      • CPU 状态
      • CPU 现场保护区
        • PC
        • SP
        • 其他寄存器
      • 栈:包括用户栈和内核栈
      • 关联的进程和线程指针
  • 线程与进程的对比
    • 资源
      • 进程拥有独立的地址空间,存放代码和数据,打开若干文件。
      • 进程包含至少一个线程,进程创建时创建第一个线程。
      • 线程共享进程的所有资源,线程自身包含很少资源。
    • 调度
      • 进程调度要切换进程上下文,开销大。
      • 同一进程内的线程调度只切换线程上下文,开销小。
      • 不同进程的线程调度相当于进程调度。
    • 并发
      • 基于线程的并发性比进程高。
    • 安全
      • 线程可以访问进程数据,可以改变其他线程的数据,共享数据方便,但容易发生数据竞争。
  • 线程的系统支持
    • 用户级
      • 线程功能完全在用户程序实现。
      • OS 的调度单元还是进程,一个线程阻塞实际上是进程阻塞,所有线程都无法执行。
    • 核心级
      • 内核实现线程功能,用户程序使用线程都是通过系统调用,1:1 模型。
      • OS 的调度单元是线程,一个线程阻塞不影响其他线程。
    • 两级结合
      • 内核实现线程功能,用户程序实现运行时,在多个核心级线程上调度用户级线程,M:N 模型。
  • LWP
    • LWP 即 Light Weight Process,与内核线程一一对应。
    • 进程可以申请多个 LWP,LWP 可以并发执行多个用户级线程。
    • Linux 的线程是 LWP