线程
什么是线程
在进程之中增加一类实体,满足
实体之间可以并发执行
实体之间共享地址空间
此类实体为线程
为什么要引入线程
减少程序在并发执行时所付出的时空开销,提高操作系统的并发性能
线程易忘点
-
线程可以创建和撤销另外一个线程
-
线程也拥有就绪、阻塞和运行三种状态
-
同一个线程共享内存和文件资源,可不通过内核项直接通信
线程时cpu的基本调度单元
在引入线程之后进程只作为除cpu外的系统资源的分配单元(
线程和进程的比较
- 调度
线程是资源分配单元,线程是cpu调度单位,线程为独立调度的基本单位
在同一个进程之中,线程的切换不会引起进程切换,从同一个进程中的线程切换到另外一个进程的线程会引起进程切换。
- 拥有资源
进程是系统之中拥有资源的基本单位,而线程不拥有系统资源
- 并发性
进程可以相互并发,且一个进程之中的不同线程可以并发执
- 独立性
进程有独立的地址空间和资源
同一个进程中线程共享地址空间和资源
- 系统开销
进程切换时涉及进程上下文的交换()
线程只需要保存和设置少量寄存器内容
上下文切换
概念:
操作系统通过处理器调度让处理器轮流执行多个进程。实现不同进程中指令交替执行的机制称为进程的上下文切换。
进程的上下文
进程的物理实体(代码和数据等)和支持运行的环境合称为进程的上下文。
线程的实现方式
分为三种,用户级线程(User-Level Thread,ULT)、内核级线程(Kernel-Level Thread , KLT)、组合方式。
用户级别线程
线程功能通过一组用户级线的线程库函数来完成线程的管理,包括调度、创建、终止同步等。
其中线程库(库函数)存在于用户空间之中,因此称之为用户级别线程
特点
-
不依赖操作系统来实现,可用于不支持线程的多进程操作系统;
-
在用户空间形成线程机制;
-
同一进程内的用户线程切换速度快;
-
允许每个进程拥有自己的线程调度算法。
设置用户级线程之后,cpu的基本调度单位不是线程而是进程
缺点
-
当进程之中的一个线程被阻塞的时候,存在于其中的所有线程都会被相应的阻塞
-
由于在内核之中只存在一个进程,因此只能够分配一个cpu,所以只有一个进程之中的线程会被执行,无法实现同一进程中的线程并发
内核级别线程
由内核通过系统调用实现的线程机制,由内核完成线程的创建、终止和管理
特点
-
由内核维护PCB和TCB
-
线程执行系统调用被阻塞时候不影响其他线程
-
线程的创建、终止和切换相对消耗较大
-
内核以线程为单位进行CPU时间分配
-
内核本身可采用多线程技术,提高系统的执行速度和效率
多线程模型
多对一模型
将多个用户级线程映射到一个内核级线程之中
优点
线程管理在用户空间进行,无须切换到核心态,效率较高
缺点
一个线程在访问内核时候发生阻塞,整个进程阻塞。
只有一个线程能进行访问内核,多线程不能在多cpu上运行
一对一模型
将每个用户级线程映射到一个内核级线程中。
优点
当一个线程被阻塞的时候,运行调度另外一个线程运行,并发能力强
缺点
开销大,创建一个线程用户级线程,就要创建一个内核级线程,极大的限制了系统所支持的线程数量
多对多模型
将n个用户级线程映射到m个内核级别线程上,要求n>=m
拥有上述两种模型的优点
度另外一个线程运行,并发能力强
缺点
开销大,创建一个线程用户级线程,就要创建一个内核级线程,极大的限制了系统所支持的线程数量
多对多模型
将n个用户级线程映射到m个内核级别线程上,要求n>=m
拥有上述两种模型的优点