线程概念、多线程模型
什么是线程,为什么要引入线程
- 还没引入进程之前,系统中各个程序只能串行执行
- 引入进程之后,可以边听音乐边玩QQ
- 引入线程之后,在QQ里可以边聊天边传送文件等
传统的进程是程序执行流的最小单位,引入线程后,线程成为了程序执行流的最小单位
线程是一个基本的CPU执行单元,也是程序执行流的最小单位,引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务
引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)
引入线程机制后,有什么变化
线程有哪些重要的属性
- 线程是处理机调度的单位
- 多CPU计算机中,各个线程可占用不同的CPU
- 每一个线程都有一个线程ID、线程控制块TCB
- 线程也有就绪、阻塞、运行三种基本状态
- 线程几乎不拥有系统资源
- 同一进程的不同线程间共享进程的资源
- 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预
- 同一进程中的线程切换,不会引起进程切换
- 不同进程中的线程切换,会引起进程切换
- 切换同进程内的线程,系统开销很小
- 切换进程,系统开销较大
线程的实现方式
用户级线程ULT(从用户视角能看到的线程)
早期的操作系统(早期Unix)只支持进程,不支持线程,当时的“线程”是由线程库实现的
内核级线程KLT(从操作系统视角看到的线程)
由操作系统支持的线程,内核级线程才是处理机分配的单位
多线程模型
在支持内核级线程的系统下,通过用户级线程和内核级线程的映射关系,可以划分为几种多线程模型