9-线程概念与多线程模型
线程
概念
线程是一个基本的CPU执行单元,也是程序执行流的最小单元
引入线程后,不仅是进程间可以并发执行,一个进程的不同线程之间也可以并发执行,提高了系统的并发度,使得一个进程内可以并发执行多项任务(例如QQ可以同时视频聊天,发送文件等等)
引入线程后,进程只作为除CPU以外的系统资源的分配单元(如打印机,内存地址空间等),即除CPU以外的系统资源还是直接分配给进程而不是某个线程
引入线程机制后,发生的变化
线程的属性
- 线程是处理机调度的单位
- 多CPU计算机中,各个线程可以占用不同的CPU
- 每个线程都有一个线程ID,和线程控制块(TCB)用来进行区分
- 线程同样有就绪,阻塞,运行三种基本状态
- 线程几乎不拥有系统资源
- 同一进程的不同线程间可以共享进程的资源
- 由于同一进程的不同线程间共享内存地址空间,所以各个线程间通信甚至无需系统干预
- 同一进程中的线程间进行切换,不会引起进程切换
- 不同进程中的线程进行切换,会引起进程切换
- 切换同进程中的线程,系统开销很小
- 切换进程,开销较大
线程的实现方式
用户级线程
用户级线程由应用程序通过线程库实现,所有的线程管理工作都是由应用程序负责的(线程的创建,撤销,切换等等)
用户级线程中,线程切换可以在用户态下直接完成,无需操作系统干预
这种实现方式在用户看来有多个线程(同时并发执行多项操作),但是在操作系统内核看来,并不能意识到线程的存在(线程切换不由操作系统控制,这也说明操作系统不能将这种线程分配到多个CPU上并行执行,操作系统不直接管理这种线程)
即用户级线程对用户不透明,对操作系统透明(计算机领域内,透明指的是无法看到)
内核级线程
内核级线程的管理工作由操作系统内核完成。即线程调度,线程切换等工作由内核负责。因此内核级线程的切换必须在核心态下执行
注意
操作系统只能“看见”内核级线程,因此只有内核级线程才是处理机分配的单位
以下方的多对多模型为例,其由三个用户级线程映射到两个内核级线程上,在用户看来,进程中同时有三个线程并发执行,但在操作系统看来,只有两个内核级线程,所以哪怕是在4核处理机的计算机上运行,该进程也最多只能被分配到两个核心,最所只有两个用户进程并行执行
多线程模型
多对一模型
一对一模型
多对多模型
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment