面试基础篇|操作系统复习(三)——线程的概述

213 阅读4分钟
1. 线程的概念和作用
  • 线程是一个基本的CPU执行单元,也是程序执行流的最小单位。
  • 引入线程之后,进程内的各线程之内也可以并发,从而进一步提升了系统的并发度。
  • 引入线程之后,进程只作为除CPU之外的系统资源的分配单元(内存地址、打印机都是分配给进程的)。
2. 线程带来的变化
  • 资源分配、调度

    • 进程是资源分配的基本单位,线程是调度的基本单位。
  • 并发性

    • 进程内的各线程可以并发,提高系统并发性。
  • 系统开销

    • 线程间并发,在同一进程内的线程切换,不需要切换进程环境,系统开销减少。
3. 线程的属性
  • 线程是CPU的调度单位。
  • 多CPU计算机中,各个线程可占用不同的CPU。
  • 每个线程都有一个线程ID、线程控制块(TCB)。
  • 线程也有就绪态、阻塞、运行三种基本状态。
  • 线程几乎不拥有系统资源,系统资源(除CPU)都是分配给进程的。
  • 同一进程的不同线程间共享进程的资源。
  • 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预。
  • 同一进程中的线程切换,不会引起进程切换。
  • 不同进程中的线程切换,会引起进程切换。
  • 切换同进程内的线程,系统开销小;切换不同进程的线程,系统开销大。
4. 线程的实现方式
  • 用户级线程

    • 应用程序内部实现线程的管理。

    • 线程切换不需要切换CPU的状态。

    • 操作系统不能意识到用户级线程的存在

    • 优缺点

      • 优点:用户级线程切换在用户态即可完成,不需要切换到内核态,线程管理的开销小,效率高。
      • 缺点:当一个用户级线程阻塞后,整个进程都被阻塞,并发度不高。多个线程不能在多核CPU上并行运行。
  • 内核级线程

    • 操作系统实现线程的管理

    • 线程切换需要切换CPU的状态

    • 操作系统能意识到内核级线程的存在

    • 优缺点

      • 优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多个线程可以在多核CPU上并行运行。
      • 缺点:用户进程会占用多个内核,线程切换由操作系统内核完成,需要切换CPU的状态,导致线程管理的开销大,成本高。
5. 多线程模型
  • 一对一模型

    • 一个用户级线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。

    • 优缺点

      • 优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多个线程可以在多核CPU上并行运行。
      • 缺点:用户进程会占用多个内核,线程切换由操作系统内核完成,需要切换CPU的状态,导致线程管理的开销大,成本高。
  • 多对一模型

    • 多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。

    • 优缺点

      • 优点:用户级线程切换在用户态即可完成,不需要切换到内核态,线程管理的开销小,效率高。
      • 缺点:当一个用户级线程阻塞后,整个进程都被阻塞,并发度不高。多个线程不能在多核CPU上并行运行。
    • 注意点

      • 操作系统只看得见”内核级线程“,只有内核级线程才是CPU分配的单位。
  • 多对多模型

    • n个用户级线程映射到m个内核级线程(n>=m)。每个用户进程对应m个内核级线程。

      • 克服了多对一模型并发度不高的缺点。
      • 克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。
6. 用户级线程和内核级线程的区别
  • 用户级线程是”代码逻辑“的载体。一个”代码逻辑“只有获得”运行机会“才能被CPU执行。
  • 内核级线程是”运行机会“的载体,只有内核级线程才是CPU分配的单位。
7. 总结
  • 重点:线程的概念,与进程的区别。线程是CPU调度的最小单位。
  • 重点:用户级线程与内核级线程的区别,内核级线程才是CPU分配的单位。
  • 重点:多线程不同模型的特点
  • 上述重点都是面试常问点
  • 请各位大佬发现错误,能指导菜鸟小弟
  • 菜鸟也想努力进大厂,加油