王道操作系统笔记,视频链接:2.1.6.1 线程的概念与特点

知识总览

知识总览

为什么引入线程

  1. 知识复习(进程):在没有引入进程之前,系统中各个程序只能串行执行,引入进程之后就可以并发执行,进程是程序的一次执行。
  2. 问题引入:类似于QQ,可以同时实现视频、文字聊天、传送文件等,这些功能显然不是由一个程序顺序处理就能实现的,那应该如何实现呢?
  3. 有的进程可能需要“同时”做很多事,而传统的进程只能串行地执行一系列程序。为此,引入了“线程”,来增加并发度。
  4. 传统的进程是程序执行流的最小单位,引入线程后,线程成为了程序执行流的最小单位(也就是CPU并发执行的最小单位),如图所示:
    引入线程前后对比
  5. 可以把线程理解为“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单位
  6. 引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如:QQ视频、文字聊天、传文件等)
  7. 引入线程后,进程不再是CPU调度的基本单位,它只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。
    也就是说,系统负责分配资源时,是按照进程分配的,而不是线程。

引入线程后的变化

  1. 资源分配、调度
  • 传统进程机制中,进程是资源分配、调度的基本单位
  • 引入线程后,进程是资源分配的基本单位线程是调度的基本单位
  1. 并发性
  • 传统进程机制中,只能进程间并发
  • 引入线程后,各线程间也能并发,提升了并发度
  1. 系统开销
  • 传统的进程间并发,需要切换进程的运行环境,系统开销很大
  • 线程间并发,如果是同一进程内的线程切换,则不需要切换进程环境系统开销小
  • 引入线程后,并发所带来的系统开销减小
  • PS:(来自deepseek)进程环境主要指独立的虚拟地址空间及其页表;同一进程内的线程切换无需更换页表,从而避免了昂贵的TLB(地址翻译缓存)和CPU缓存刷新,这是系统开销大幅减小的根本原因。

线程的属性

  1. 线程是处理机调度的单位
  2. 多CPU中,各个线程(包括同一进程中的不同线程)可占用不同的CPU
  3. 每个线程都有一个线程ID、线程控制块(TCB,类似进程的PCB)
  4. 线程也有就绪、阻塞、运行三种基本状态
  5. 线程几乎不拥有系统资源
  6. 同一进程的不同线程间共享进程的资源
  7. 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预
  8. 同一进程中的线程切换,不会引起进程切换
  9. 不同进程中的线程切换,会引起进程切换
  10. 切换同进程内的线程,系统开销很小
  11. 切换进程,系统开销较大
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐