文章目录
- 一. 线程
- 为什么要引入线程:
- 引入进程后的变化
- 线程的属性
- 线程的实现
- 二. 多线程模型
- 1. 多对一模型
- 2. 一对一模型
- 3. 多对多模型
- 三. 总结
一. 线程
为什么要引入线程:
- 有的进程可能要“同时进行很多事”(如QQ的语音、视频、文件处理等)。但传统进程只能串行地执行,为此引入线程增加并发度
- 程序执行流的最小单位:传统为进程,如今为线程
- 线程可以理解为“轻量级进程”
- 进程内的各线程之间也可以并发,从而进一步提升系统的并发度
- 引入线程后,进程只作为除CPU外的系统资源分配单元(如打印机、内容地址空间等)
引入进程后的变化
- 调度的基本单位更换成线程
- 切换进程,需要切换运行环境,系统开销大。
- 切换线程,不需要切换运行环境,系统开销小。
- 举个例子:后端组的电脑,更换使用员工:同样换成后端员工,就可以省去不少环境配置的功夫;而换成前端员工,那么相对肯定麻烦点。
线程的属性
- CPU 调度的单位
- 几乎不拥有系统资源
- 共享内存地址空间,同一进程的线程间通信无需系统干预
- 同一进程中线程切换,不会引起进程切换;不同进程中线程则会。
- 同一进程中线程切换,系统开销小;反之则大
- 每个线程都有线程ID、线程控制块。
线程的实现
- 用户级线程:
- 用户态下,即可完成线程切换
- 对用户而言,是多线程;对操作系统而言,是单线程(透明)
- 可以理解成:“从用户视角能看到的线程”
- 系统级线程:
- 线程管理由操作系统内核完成,必须在核心态下进行。
- 可以理解成“从操作系统内核视角看得到的线程”
- 二者结合的情况
- 注意:用户级线程数大于等于内核级线程
- 重点:只有内核级线程才是处理机分配的单位。
- 图中例子看一下,帮助理解。
二. 多线程模型
1. 多对一模型
- 优点:不用切换到核心态,效率高
- 缺点:一个线程阻塞则整个进程阻塞,并发度不高。不支持多核CPU下并行。
2. 一对一模型
- 优点:一线程阻塞,其他线程还可继续运行,并发能力强,支持多核CPU下并行。
- 缺点:线程管理成本高,开销大。一用户进程占多个内核级线程
3. 多对多模型
- 结合以上两种模型的结果,解决缺点。