1. 知识总览
2. 什么是线程 为什么要引入线程
进程是伴随着多道程序技术而引入的
考虑QQ,可以同时聊天和视频和传送文件,这些功能显然不可能是程序按顺序执行能实现的
进程可能要同时做很多事,因此将进程分解为多个线程。现在,线程成为了程序执行流的最小单位,可进行线程调度。
通过引入线程,可以进一步提高并发度。进程只作为资源分配的最小单元,调度的最小单位是线程。
同一进程的线程,由于不需要切换进程环境,切换起来开销比进程间开销小的多。即并发带来的系统开销小
同一个进程的各线程可能在多个cpu核中运行
和进程一样,线程有它的TCB和ID,也有就绪,阻塞,运行三种状态
线程几乎不拥有系统资源,系统资源是分配给进程的,同一进程内的线程共享进程的资源
同一进程内的线程间切换,不用切换进程环境。
3. 线程的属性
4. 线程的实现方式
线程分为 用户级线程 和 内核级线程(即守护线程)
用户级线程 由 应用程序 通过 线程库 创建和管理
用户级线程间的切换 也由 应用程序 负责管理(在用户态下就可以完成)
事实上,对用户来说,是有多个线程,但是对操作系统内核来说,并看不见线程的存在。
用户级线程只有用户能看到,操作系统根本看不到!!!
内核级线程 由操作系统负责管理
内核级线程的切换 需要在核心态下完成
内核级线程 就是 操作系统能看到的
注意: 内核级线程 才是 处理机分配的 单位
下图中的这个进程有三个用户级进程,两个内核级线程。但即使在一个四核CPU上,最多只能占用两个核,只能有两个用户线程并行执行。
5. 多线程模型
多线程模型问题:
所谓多线程模型就是指 几个用户级线程映射到几个内核级线程的问题
多对一模式:多个用户线程映射到一个内核线程
优点:用户级线程 在 用户态 即可完成切换,开销小
缺点:并发度低,一个用户线程阻塞将导致整个进程阻塞。多个线程也不能在多处理机上运行
一对一模式:一个用户线程对应一个内核级线程
优点:并发度高,一个线程阻塞后其它线程可以继续执行
缺点:线程切换要在核心态下完成,开销大
多对多模式:
n个用户线程映射到m个内核线程(n>=m)
既克服了 多对一模型中并发度低的缺点,又克服了一对一模型中占用太多内核级线程的缺点
6. 总结
回顾:
线程是处理机调度的单位
内核级线程才是操作系统进行处理机分配的单位
多对一模型中,一个用户级线程阻塞将导致整个进程的阻塞