背景
只有进程时,进程就是执行流的最小单位。
引入线程后,线程成为执行流最小单位。CPU调度的基本单位为线程。
线程的引入,增加了并发度。
引入线程后带来的改变
- 进程是资源分配,调度的基本单位 >> 进程是资源分配的基本单位。线程是调度的基本单位。
- 并发性得到提高
- 进程间并发,调度开销大 >> 线程间并发,调度开销小。
线程的属性
- 每个线程有线程ID、线程控制块PCB
- 有就绪、阻塞、运行三种基本状态
- 同一进程的线程共享地址空间,因此彼此通信可以不通过系统的干预。
线程的实现
从实现层面上来讲,可以分为两种:
用户级线程:
由应用通过线程库实现,线程管理不涉及用户态-核心态转换。
内核级线程:
由操作系统内核负责线程调度。
在操作系统的角度,只“看见”内核级线程。
线程模型
根据 用户线程数 : 内核线程数 可以分为:
多对一:线程切换开销小。一个线程阻塞导致整个进程的其他线程阻塞。
一对一:线程切换开销大。各个线程可以分配到到多核,并发度高。
多对多:结合两者优点。开销没那么大,并发度也还不错。