Tips
【操作系统】——进程的控制及通信(4)
【操作系统】——处理机的调度(6)
一、线程的引入
在没引进进程概念的时候,程序只能顺序执行,我们不能一边登qq,一边听音乐,而进程引入之后使得每个应用程序(系列程序)间可以并发执行,所以进程是使得多个程序可并发执行的,也就实现了多应用同时运行。
现在单纯地在qq当中,我们可以做的事情也很多,而如果只有进程的话,还不足以实现,因为进程只实现了应用程序间的并发,而应用程序内部程序模块的并发没有实现,而本小节要介绍的线程就是为了解决这个问题的。
线程实现了应用程序内部模块的并发执行!
1、引入线程后带来的变化
2、线程的相关属性
二、线程的实现方式
Q: 在早期只支持进程的系统中,如何实现线程呢?
A: 因为早期的系统只支持进程,而我们又要实现线程,所以自然而然的,我们就会想到既然系统只支持进程,那我们是否可以做出一种“线程形式”的进程呢??
其实是可以的。
1、用户级线程
其实这是一种在操作系统不支持的情况下,用户自己通过灵活变通实现的线程。
while循环是最弱智的线程库,线程库完成对线程的管理工作(如调度)
用户级线程,顾名思义是早期人们为实现线程而用代码实现的线程,即“线程形式”的进程,上述while循环就表示一个线程库,线程库完成了对线程的管理,包括线程切换等,也正因为线程库已经完成了对线程的管理,不需要请求操作系统,所以用户级线程是对操作系统不可见的,但是对用户可见,毕竟是用户自己代码实现的。
2、内核级线程
此时的操作系统已经可以支持线程了,即线程对操作系统可见
3、多线程模型
(1)一对一模型
(2)多对一模型
(3)多对多模型
在用户态下由线程库统一对用户级线程的请求向内核反映,减少状态转换的开销,内核级线程具有多个,防止单一内核级线程阻塞,在多对多模型中,只有所有内核级线程阻塞才会阻塞。