2.1(4) 线程

文章目录

线程的概念

引入进程 的目的是更好地使多道程序并发执行,提高资源利用率和系统吞吐量
引入线程 的目的则是减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能

有的进程可能需要"同时"做很多事,而传统的进程只能串行地执行一系列程序,为此,引入了"线程"来增加并发度

线程 最直接的理解就是"轻量级进程 ",它是一个基本的CPU执行单元 ,也是程序执行流的最小单元

线程由线程ID、程序计数器、寄存器集合和堆栈组成

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源

一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行

引入线程后带来的变化

线程的属性

  • 线程是处理机调度的单位
  • 多核CPU计算机中,各个线程可占用不同的CPU
  • 每个线程都有一个线程ID、线程控制块(TCB)
  • 线程也有就绪、阻塞、运行三种基本状态
  • 线程几乎不拥有系统资源
  • 同一进程的不同线程间共享进程的资源
  • 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预
  • 同一进程中的线程切换,不会引起进程切换
  • 不同进程中的线程切换,会引起进程切换
  • 切换同进程内的线程,系统开销很小
  • 切换进程,系统开销较大

线程的实现方式

用户级线程(ULT)

历史背景:早期的操作系统只支持进程,不支持线程,当时的"线程"是由线程库实现的

也就是说,在操作系统的视角看到的依然只有进程,但是程序员们写的应用程序当中可以使用线程库来实现多个线程并发地运行(线程库完成对线程的管理工作,如:调度)

从代码的角度看,线程其实就是一段代码逻辑

用户级线程特点

  1. 用户级线程由应用程序通过线程库实现,所有的线程管理工作 都由应用程序负责(包括线程切换)
  2. 用户级线程中,线程切换 可以在用户态下即可完成,无需操作系统干预
  3. 在用户看来,是有多个线程,但是在操作系统内核看来,并意识不到线程的存在
    "用户级线程 "就是"从用户视角看能看到的线程"

用户级线程优缺点

  • 优点

    用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高

  • 缺点

    当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高

    在使用用户级线程实现线程的情况下,CPU的调度单位依然是进程,多个线程不可在多核处理机上并行运行

内核级线程(KLT)

内核级线程又称"内核支持的线程",即由操作系统支持的线程,大多数现代操作系统都实现了内核级线程

内核级线程特点

  1. 内核级线程的管理工作操作系统内核完成
  2. 线程调度、切换等工作都由内核负责,因此内核级线程的切换 必然需要在核心态下才能完成
  3. 操作系统会为每个内核级线程建立相应的TCB(Thread ControlBlock,线程控制块),通过TCB对线程进行管理
    "内核级线程 "就是"从操作系统内核视角看能看到的线程"

内核级线程优缺点

  • 优点

    当一个线程被阻塞后,别的线程还可以继续执行,并发能力强

    多线程可在多核处理机上并行执行

  • 缺点

    一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大

多线程模型(用户级线程&内核级线程组合)

在支持内核级线程的系统中,根据用户级线程和内核级线程的映射关系,可以划分为几种多线程模型

一对一模型

一个用户级线程映射到一个内核级线程,每个用户进程有与用户级线程同数量的内核级线程

  • 优点

    当一个线程被阻塞后,别的线程还可以继续执行,并发能力强

    多线程可在多核处理机上并行执行

  • 缺点

    一个用户进程会占用多个内核级线程线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大

多对一模型

多个用户级线程映射到一个内核级线程,且一个进程只被分配一个内核级线程

  • 优点

    用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高

  • 缺点

    当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高

    多个线程不可在多核处理机上并行运行

重点 】操作系统只"看得见"内核级线程,因此只有内核级线程才是处理机分配的单位

多对多模型

n用户及线程映射到m个内核级线程(n>=m),每个用户进程对应m个内核级线程

克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点

理解

用户级线程是"代码逻辑"的载体

内核级线程是"运行机会"的载体

一段"代码逻辑"只有获得了"运行机会"才能被CPU执行

线程的状态与转换

线程的状态与转换和进程的状态与转换几乎一致

线程的组织与控制

线程控制块TCB

与进程PCB类似,系统也为每个线程配置一个线程控制块TCB,用于记录控制和管理线程的信息

线程的组织:根据需求将各个TCB有规律地组织起来分类管理

线程的控制:让线程在各种状态之间来回切换


计算机操作系统】 专栏的文章 均有参考 《王道计算机考研 操作系统》 课程视频

相关推荐
冷眼看人间恩怨4 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
Hejjon10 小时前
SpringBoot 整合 SQLite 数据库
笔记
西洼工作室12 小时前
【java 正则表达式 笔记】
java·笔记·正则表达式
初学者7.13 小时前
Webpack学习笔记(2)
笔记·学习·webpack
新手上路狂踩坑14 小时前
Android Studio的笔记--BusyBox相关
android·linux·笔记·android studio·busybox
stm 学习ing15 小时前
HDLBits训练3
c语言·经验分享·笔记·算法·fpga·eda·verilog hdl
尘觉15 小时前
算法的学习笔记—扑克牌顺子(牛客JZ61)
数据结构·笔记·学习·算法
bohu8316 小时前
sentinel学习笔记1-为什么需要服务降级
笔记·学习·sentinel·滑动窗口
初学者7.17 小时前
Webpack学习笔记(3)
笔记·学习·webpack
bohu8318 小时前
sentinel学习笔记5-资源指标数据统计
笔记·sentinel·statisticslot