操作系统-线程
线程
概念
- 引入进程是为了多道程序并发执行,引入线程则为了减小程序并发执行的开销,提高并发性能
-
线程又称为
轻量级进程
,是基本的CPU执行单元,也是程序执行流的最小单元; 是进程中的一个实体,是被系统独立调度和分配的基本单位 - 线程由**线程ID,程序计数器,寄存器集合和堆栈组成
- 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程可以并发执行
-
线程也有
就绪,阻塞,运行
态
属性
-
线程是轻型实体,不拥有系统资源,但每个线程具有
唯一的标识符和线程控制块
; 线程控制块记录
线程执行的寄存器和栈等线程状态
- 不同的线程可以执行相同的程序; 即同一个服务程序被不同用户调用时,操作系统把它们创建成不同的线程
- 线程不拥有系统资源,只拥有运行必不可少的一点资源; 与同属一个进程的其他线程共享进程中的资源
- 单CPU系统中,各线程交替占用CPU; 多CPU系统中,各线程占用不同的CPU,若各个CPU同时为一个进程中各个线程服务,可缩短处理时间
与进程比较
-
引入线程之后,
线程是独立调度的基本单位,进程是拥有资源的基本单位
- 线程不拥有资源,但线程可以访问其隶属进程的系统资源
- 引入线程的操作系统,不仅进程可以并发执行,线程也可以,使得操作系统有更好的并发性
- 创建和撤销进程时,系统为之分配或回收资源等付出的开销远大于创建和撤销线程; 进程切换涉及执行进程CPU环境的保存和新调度到进程CPU环境的设置,而线程切换只需要保存和设置少量寄存器的内容,开销很小
- 进程间通信(IPC)需要经常同步和互斥手段辅助,以保证数据一致性,而线程间可以直接读写进程数据段进行通信
线程的实现
-
用户级线程(User-Level Thread ULT)
-
线程管理的所有工作都由
应用程序
完成,内核意识不到线程存在 - 应用程序可以通过使用线程库设计成多线程程序
-
线程管理的所有工作都由
-
内核级线程(Kernel-Level Thread KLT)
- 线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码
- 内核为进程及其内部的每个线程维护上下文信息,调度也在内核基于线程架构的基础上完成
多线程模型
-
多对一模型
-
多个用户级线程映射到一个内核级线程
- 优点: 线程管理在用户空间完成,因此效率比较高
- 缺点: 若一个线程在使用内核服务时被阻塞,整个进程都会被阻塞; 多个线程不能并行运行在处理器上
-
多个用户级线程映射到一个内核级线程
-
一对一模型
-
一个用户级线程映射到一个内核级线程
- 优点: 运行并发执行,一个线程阻塞,运行另一个进程执行
- 缺点: 每创建一个用户级线程都要创建一个内核级线程,开销大,影响性能
-
一个用户级线程映射到一个内核级线程
-
多对多模型
-
n个用户级线程映射到m个内核级线程 m<=n
- 是上两个模型的折中,既克服了多对一模型的并发度不高,又克服了一对一模型开销大的缺点,还拥有各自的优点
-
n个用户级线程映射到m个内核级线程 m<=n
版权声明:本文为zzxb_coder原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。