线程概念、多线程模型
廖家龙 用心听,不照做

什么是线程,为什么要引入线程

  • 还没引入进程之前,系统中各个程序只能串行执行
  • 引入进程之后,可以边听音乐边玩QQ
  • 引入线程之后,在QQ里可以边聊天边传送文件等

传统的进程是程序执行流的最小单位,引入线程后,线程成为了程序执行流的最小单位

线程是一个基本的CPU执行单元,也是程序执行流的最小单位,引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务

引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)

引入线程机制后,有什么变化

线程有哪些重要的属性

  • 线程是处理机调度的单位
  • 多CPU计算机中,各个线程可占用不同的CPU
  • 每一个线程都有一个线程ID、线程控制块TCB
  • 线程也有就绪、阻塞、运行三种基本状态
  • 线程几乎不拥有系统资源
  • 同一进程的不同线程间共享进程的资源
  • 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预
  • 同一进程中的线程切换,不会引起进程切换
  • 不同进程中的线程切换,会引起进程切换
  • 切换同进程内的线程,系统开销很小
  • 切换进程,系统开销较大

线程的实现方式

用户级线程ULT(从用户视角能看到的线程)

早期的操作系统(早期Unix)只支持进程,不支持线程,当时的“线程”是由线程库实现的

内核级线程KLT(从操作系统视角看到的线程)

由操作系统支持的线程,内核级线程才是处理机分配的单位

多线程模型

在支持内核级线程的系统下,通过用户级线程和内核级线程的映射关系,可以划分为几种多线程模型

一对一模型

多对一模型(相当于用户级线程ULT)

多对多模型(集二者之所长)