一. 什么是线程,为什么要引入线程?
1. 为什么要引入线程
在20世纪80年代中期,人们又提出了比进程更小的基本单位——线程,视图用它来提高程序并发执行的程度,以进一步改善系统的服务质量
在没有引入进程之前,系统中的各个程序只能串行执行
不能够同时使用QQ和听音乐
引入进程之后
可以同时听音乐和使用QQ
但是如果你想使用QQ进行视频聊天,同时又进行文字聊天,而且还传输文件,
这些功能,在传统的进程上是不能同时进行的,因为传统的进程是程序的一次顺序执行,只能串行的执行一系列程序。
人们希望每个进程还能够同时的做很多事情,而传统的进程只能串行的执行一系列程序,所以,人们又引入了线程,来增加并度。
2. 什么是线程
二. 线程有哪些特性呢?
1. 线程的基本特性
- 与传统进程一样,线程之间也存在共享资源和相互合作有的制约关系,这就导致线程也有中断性。进而线程在运行时就会出现以下三种状态
- 执行状态:线程已获得处理机而正在运行
- 就绪状态:线程以具备各种执行条件,等待CPU继续执行
- 阻塞状态:线程在执行中因某事件受阻而处于暂停状态
- 线程状态之间切换与进程也是一样的
- 线程也有控制块(TCB)
里面存储线程的信息记录来用于控制和管理线程
2. 传统的进程和线程进行比较
-
调度的基本单位
传统OS中,进程是作为独立调度和分派的基本单位,所以进程是独立运行的基本单位 缺点:每次调度,都需要上下文切换,开销大 引入进程的OS中,把线程作为调度和分派的基本单位,所以线程是独立运行的基本单位 优点:线程切换,开销小,也不会引起进程的切换
-
并发性
进程可以并发执行 引入线程的OS中,线程也可以并发执行,一个进程中的所有线程都能并发执行
-
拥有资源
进程可以拥有资源,作为系统中拥有资源的一个基本单位 线程本身不能拥有系统资源,线程只具备一点资源(控制线程的线程控制块TCB、用于指示被执行指令序列的程序计数器、一组寄存器、堆栈) 多个线程允许共享该进程所拥有的资源(原因是:属于同一进程的所有线程都具有相同的地址空间)
-
独立性
每个进程拥有一个独立的地址空间和其他资源,除了共享全局变量外,不允许其他进程的访问 同一个进程中的不同线程之间的独立性比不同进程之间的独立性低。 原因是:同一个进程之间的线程可以相互合作,共享进程的内存地址空间和资源
-
系统开销
创建和撤销进程的开销大 进程的上下文切换开销大 创建和撤销线程的开销小 线程之间同步和通信简单,无需OS内核干预
-
支持多处理机系统
在多处理机系统中,传统的进程,即单线程进程,不管有多少个处理机,该进程只能运行在一个处理机上 多线程进程,可以将一个进程中多个线程分配到多个处理机上,使他们并行执行
3. 引入线程机制后,产生的变化
4. 多线程操作系统的特点
进程已不再是可执行的实体,在多线程OS中,把线程作为独立运行(调度)的基本单位
虽然是这样,但进程任然具有与执行相关的状态
如:进程处于执行状态,实际上是指进程中的某线程正在执行
对进程施加的与进程状态有关的操作也对其线程起作用(挂起进程,就是把进程中的所有线程都挂起了)
5. 通过以上总结线程的属性
三. 线程的实现方式
线程已在许多系统中实现,但各系统的实现方式并不完全相同。
在有的系统中,特别是一些数据库管理系统,实现的是用户级线程
如infomix
另外一些系统实现的是内核支持线程
如Macintosh和OS/2操作系统
还有些系统则同时实现这两种类型的线程
如Solaris操作系统
1. 用户级线程
2. 内核级线程
3. 同时支持用户级线程和内核级线程
在同时支持用户级线程和内核级线程的系统中,由于几个用户级线程映射到几个内核级线程的问题引出了“多线程模型”问题
-
多对一模型
-
一对一模型
-
多对多模型