操作系统:线程
线程的概念
线程是比进程更小的、能够独立运行的基本单位。用于进一步提高程序并发执行的程度,降低并发执行的时空开销。
线程的引入
进程是实现系统并发运行的一种实体。获取处理器资源的时,叫做进程调度
,创建进程、调度进程、管理进程都会有很大的额外开销,为了减小额外的开销,保持系统的并发性,现代操作系统将资源的申请和调度分开,进程作为资源的申请和拥有单位,线程作为调度的基本单位。
线程拥有其进程的所有资源
线程是进程中的一个实体,是被系统独立调度的基本单位,线程本身基本上不拥有资源,只拥有一些运行中必不可少的资源(比如程序计数器、栈、寄存器等),但是它可以与同属一个进程的其他线程共享进程所拥有的全部资源。
线程的定义
线程定义线程是进程中的一个实体,是可独立参与调度的基本单位,一个进程可以有一个或者多个线程,他们共享所属进程所拥有的资源。
线程具有如下属性:
- 多个线程可以并发执行
- 一个线程可以创建另一个线程
- 线程具有动态性,一个线程被创建之后就开始了他的生命周期,可能处于不同状态,直到死亡。
- 每个线程都有自己的数据结构,即
线程控制块
,记录了有关于线程的各种信息。 - 在同一个进程内,所有线程共享同一个地址空间(即所属进程的存储空间)
- 一个进程中的线程在另一个进程中是不可见的。
- 同一个进程内的线程之间的通信主要是基于全局变量进行的。
线程的状态
与进程类似,线程也具有生命周期。
线程的状态有:运行、就绪、等待
。
线程不是资源的拥有单位,挂起状态对线程是没有意义的。
进程的挂起也意味着线程的资源的失去。
进程终止也意味着线程终止。
线程的特征
线程有时被称为轻量级进程。
从下面几个方面来比较进程和线程:
1)拥有资源
进程可以申请和拥有资源,而线程只拥有那些必须的资源,但是可以访问进程所有的资源。
2)调度方面
进程是作为独立拥有资源的基本单位,线程是独立参与调度的基本单位。同一个进程内的线程切换不会引起进程切换。
3)并发性方面
线程加强并发执行强度,同一个进程的多个线程间亦可并发执行
4)系统开销
相比于没有引入线程的操作系统,引入线程的系统其系统开销将显著降低。同一个进程内线程之间的通信由于共享所属进程的存储空间,因此也比进程通信更加容易。
线程的分类
线程分为3类:
1)内核级线程
内核级线程指的是线程的管理工作都由内核来完成,由内核所提供的线程API来使用线程。任务提交给操作系统进行的时候,内核为其创建进程和一个基线程 。线程在执行过程中通过内核的创建线程原语来创建其他线程 。应用程序的所有线程均在一个进程中获得支持 。
- 内核级线程的优点
在多处理器上,内核能够同时调度同一进程中的多个线程并行执行 。若进程中的一个线程被阻塞,内核能够调度同一进程的其他线程占有处理器运行,也可以运行其他进程中的线程 。切换速度比较快,内核自身也可用多线程技术实现,从而提高系统的执行效率。 - 内核级线程的缺点
线程在用户态运行,而线程的调度和管理在内核实现 。线程需要用户态→核心态→用户态的模式切换,系统开销较大(线程模式切换) 。
2)用户级线程
用户级线程是指线程的管理由应用程序完成,在用户空间中实现,内核无须感知线程的存在 。由用户空间中的线程库来完成
- 用户级线程优点
线程切换无须使用内核特权方式
允许进程按照应用的特定需要选择调度算法,且线程库的线程调度算法与操作系统的低级调度算法无关
能够运行在任何操作系统上,内核无须做任何改变 - 用户级线程的缺点
一个用户级线程的阻塞将引起整个进程的阻塞
进程执行不可能得益于多线程的并发执行
3)混合式线程:
操作系统既支持用户级线程,又支持内核级线程 。
线程的实现分为两个层次 :
- 用户层
用户层线程在用户线程库中实现 (用户级线程 ) - 内核层
内核层线程在操作系统内核中实现 (内核级线程 )
宏观上和微观上都具有很好的并行性
在混合式线程中,一个应用程序中的多个用户级线程能分配和对应于一个或多个内核级线程,内核级线程可同时在多处理器上并行执行,且在阻塞一个用户级线程时,内核可以调度另一个线程执行
线程与进程的结构
单线程进程结构
多线程进程结构
本文来自博客园,作者:{Zeker62},转载请注明原文链接:https://www.cnblogs.com/Zeker62/p/15046236.html