学习日期:2024.7.2
内容摘要:线程的概念、存在的意义、线程的属性,线程的实现方式,线程的状态与组织。
线程的概念
拿QQ来说,QQ既可以打视频电话,也可以在这同时进行文字聊天或传送文件,进程是程序的一次执行。但这些功能显然不可能是一个程序顺序处理一次就能实现的。
有的进程需要“同时”做很多事,而传统的进程只能串行地执行一系列程序,所以引入了线程来增加并发度。
传统的进程机制中,进程是程序执行流的最小单位,但在引入线程之后,线程成为了最小单位。
线程是一个基本的CPU执行单元,是程序执行流的最小单位。 在引入线程后,不仅是进程之间可以并发,进程内的各个线程之间也可以并发,进一步提升了系统的并发度,使得一个进程内可以同时处理更多的任务。(如QQ视频、文字聊天、文件传输等)而进程只作为除CPU之外的系统资源的分配单元。(如打印机、内存地址空间等资源都是以进程为单元分配)
传统的进程间并发,需要切换进程的运行环境,系统开销很大,但如果是同一进程的线程切换,则不需要切换进程环境,系统开销较小。
线程的属性
线程的实现方式
用户级线程(User-Level Thread,ULT)
历史背景:早期的操作系统(如:早期Unix)只支持进程,不支持线程。当时的“线程”是由线程库实现的。
很多编程语言提供了强大的线程库,程序员可以利用线程库实现线程的创建、销毁、调度等功能,操作系统事实上只“看得到”进程。
1.线程的管理工作谁来完成?
用户级线程的管理本质上是由线程库负责的,并不是由操作系统负责的。(这也是“用户级线程”名字的由来)
2.线程切换是否要CPU变态?
线程切换并不需要请求操作系统的服务,也是由线程库管理的,在用户态下即可完成,不需要CPU切换到核心态。
优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。
缺点:当某一个用户级线程被阻塞后,进程中其它的线程全部会被阻塞(进程进入阻塞态了),并发度并不高。同时多个线程不可在多核处理机上运行。(此时对操作系统来说,CPU分配的最小单位依然是进程)
内核级线程(Kernel-Level Thread,KLT)
由操作系统支持的线程,大多数现代操作系统都实现了内核级线程,如Windows,Linux等。
操作系统会为每个内核级线程建立相应的TCB(Thread Control Block,线程控制块),通过TCB对线程进行管理(类似PCB)。“内核级线程”就是“操作系统能看得到的线程”。
以一对一模型为例:
1.线程的管理工作谁来完成?
内核级线程的管理工作由操作系统内核完成。
2.线程切换是否要CPU变态?
线程的调度、切换等工作都由内核负责,因此内核级线程的切换必然需要CPU在核心态下才能完成。
优点:当一个线程被阻塞后,别的线程还能继续执行,并发能力强。多线程可在多核处理机上并发执行。
缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
多线程模型
在支持内核级线程的系统中,根据用户级线程和内核级线程的映射关系,可以划分为几种多线程模型。
一对一模型
一个用户级线程映射到一个内核级线程,每个用户进程有与用户级线程同数量的内核级线程。
优点:同“内核级线程”部分的介绍,当一个线程被阻塞后,别的线程还能继续执行,并发能力强。多线程可在多核处理机上并发执行。
缺点:同“内核级线程”部分的介绍,一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
多对一模型
多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。
本质上退化成为了用户级线程的实现方式,虽然操作系统“看得见”线程,但只看得见内核级的线程,又因为每个进程只被分配一个内核级线程,所以本质上还是ULT的线程实现方式。
对比用户级线程实现方式,事实上就是在线程库和进程之间增加了一个“内核级线程”作为处理机分配的单位而已。
优缺点同用户级线程的优缺点。
多对多模型
n个用户级线程映射到m个内核级线程,且n≥m,每个用户进程对应m个内核级进程。
克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点(n≥m,相对一对一来说能减少内核级线程数量)。
可以这么理解:
用户级线程是“代码逻辑”的载体。
内核级线程是“运行机会”的载体。(“内核级线程”才是处理机分配的单位)
一段“代码逻辑”只有获得了“运行机会”才能被CPU执行。
内核级线程中可以运行任意一个有映射关系的用户级线程代码,只有所有的内核级线程中正在运行的代码逻辑都被阻塞时,我们才说这个进程进入了阻塞状态。(进程全部的线程都进入了阻塞状态)
线程的状态与组织
线程有运行、阻塞、就绪三个状态,状态转换非常类似进程。
线程的组织与控制——基于TCB(类似进程的PCB)
内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》