2.5、线程概念和多线程模型

news2024/12/27 12:21:37

整体框架

image-20230119002426983

1、什么是线程,为什么要引入线程?

还没有引入进程之前,各个程序只能串行执行

image-20230118222749992

进程是程序的一次执行过程,但这些功能显然不可能是由一个程序顺序处理就能实现的


有的进程可能需要 “同时” 做很多事,而传统的进程只能串行地执行一系列程序。

image-20230118223919994

为此,引入了 “线程”,来增加并发度。

image-20230118224436180

引入线程后,线程成为了程序执行流的最小单位


可以把线程理解为 “轻量级进程” 。

线程 \color{red}线程 线程是一个 基本的 CPU 执行单元 \color{red}基本的\texttt{CPU}执行单元 基本的CPU执行单元

  • 也是 程序执行流的最小单位 \color{red}程序执行流的最小单位 程序执行流的最小单位

引入线程之后,不仅是进程之间可以并发,

  • 进程内的 各线程之间 \color{red}各线程之间 各线程之间也可以 并发 \color{red}并发 并发

    从而进一步 提升了系统的并发度 \color{red}提升了系统的并发度 提升了系统的并发度

    使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)


引入线程后, 进程 \color{red}进程 进程只作为 除 CPU 之外的系统资源的分配单元 \color{red}除\texttt{CPU}之外的系统资源的分配单元 CPU之外的系统资源的分配单元

  • (如打印机、内存地址空间等都是分配给进程的)。

即:进程只作为分配资源的基本单位,而将线程作为调度的基本单位

image-20230118225004543


2、引入线程带来的变化

image-20230118231907308

3、线程的属性

image-20230118232159853

例如:从 QQ 聊天窗口跳到 b 站视频就是不同进程之间线程的切换

4、线程的实现方式

4.1、用户级线程(User-Level Thread,ULT)

用户级线程由应用程序通过线程库实现。

所有的 线程管理工作 \color{red}线程管理工作 线程管理工作都由 应用程序负责 \color{red}应用程序负责 应用程序负责(包括线程切换)

用户级线程中,

  • 线程切换 \color{red}线程切换 线程切换可以在 用户态下即可完成 \color{red}用户态下即可完成 用户态下即可完成

    无需操作系统干预

在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。

  • (用户级线程对用户不透明,对操作系统透明)

image-20230118233615063

可以这样理解,“ 用户级线程 \color{red}用户级线程 用户级线程” 就是 “ 从用户视角看能看到的线程 \color{red}从用户视角看能看到的线程 从用户视角看能看到的线程

4.2、内核级线程(Kernel-Level Thread, KLT)

又称 “内核支持的线程”

image-20230118233911343

内核级 线程的管理工作 \color{red}线程的管理工作 线程的管理工作 操作系统内核 \color{red}操作系统内核 操作系统内核完成。

线程调度、切换等工作都由内核负责

  • 因此 内核级线程的切换 \color{red}内核级线程的切换 内核级线程的切换必然需要在 核心态 \color{red}核心态 核心态下才能完成。

可以这样理解,“ 内核级线程 \color{red}内核级线程 内核级线程”就是 “ 从操作系统内核视角看能看到的线程 \color{red}从操作系统内核视角看能看到的线程 从操作系统内核视角看能看到的线程

4.3、二者组合

在同时支持用户级线程和内核级线程的系统中,可采用二者组合的方式:

n 个用户级线程映射到 m 个内核级线程上( n >= m

重点重点重点 \color{red}重点重点重点 重点重点重点

操作系统只 “看得见” 内核级线程,

  • 因此只有 内核级线程才是处理机分配的单位 \color{red}内核级线程才是处理机分配的单位 内核级线程才是处理机分配的单位

image-20230118234210320

例如:

上述这个模型中,该进程由两个内核级线程,三个用户级线程,在用户看来,这个进程中有三个线程。

  • 但即使该进程在一个 4 核处理机的计算机上运行,也最多只能被分配到两个核,最多只能有两个用户线程并行执行。

5、多线程模型

在同时支持用户级线程和内核级线程的系统中,由几个用户级线程映射到几个内核级线程的问题引出了 “多线程模型” 问题。

5.1、多对一模型

多对一 \color{red}多对一 多对一模型:

  • 多个用户及线程映射到一个内核级线程。每个用户进程只对应一个内核级线程。

优点:

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

缺点:

  • 当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。
  • 多个线程不可在多核处理机上并行运行

因为线程是处理机调度的基本单位,而不是资源分配的基本单位。多个用户级映射在一个内核级线程,内核认为仅有一个线程,当一个用户级线程被阻塞,内核认为所映射的内核级线程也被阻塞,故所有映射到该内核级的用户级线程都被阻塞

image-20230118235614879

5.2、一对一模型

image-20230119000642332

一对一 \color{red}一对一 一对一模型:

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

优点:

  • 当一个线程被阻塞后,别的线程还可以继续执行,并发能力强
  • 多线程可在多核处理机上并行执行。

缺点:

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

5.3、多对多模型

image-20230118234210320

多对多模型:n 用户及线程映射到 m 个内核级线程(n >= m)。

  • 每个用户进程对应 m 个内核级线程。

克服了多对一模型并发度不高的缺点,

  • 又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

6、整体框架

image-20230119002416974

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

伯俊ERP与金蝶云星空对接集成连通应收单新增

伯俊ERP与金蝶云星空对接集成表头表体组合查询连通应收单新增(应收单-标准应收单(KD应收单销售退)数据源系统:伯俊ERP未来,伯俊科技也会砥砺前行,不断为品牌提供更全面的零售终端致胜利器。伯俊科技始终坚持创新发展,探索大零售行…

【IDEA】自动部署SpringBoot Jar包到远程服务器并通过脚本启动jar

【IDEA】自动部署SpringBoot Jar包到远程服务器并通过脚本启动jar 文章目录 前言一.Deployment使用二.ssh使用三.启动脚本 前言 IDEA版本: 2019.3 一.Deployment使用 IDRA原生的Deployment不需要离开idea就可以直接将项目部署到远程运行,同时拥有远程视图窗口…

高并发系统设计 --计数服务抽离

传统计数 模糊计数 Cache DB。写Cache,批量刷新DB。 有一个写请求,我们就写cache,写一个在cache中1,buffer记一个,差不多(buffer满了,时间到了)写一次DB,丢数据也就丢…

JVM快速入门学习笔记(二)

临近过年,事太多,学习效率也好低,最近已经好久没搞学习了,发篇简单的学习笔记意思下吧 5. 沙箱安全机制 Java安全模型的核心就是Java沙箱(sandbox),什么是沙箱?沙箱是一个限制程序运…

Oracle 12c多租户特性详解:从Schema到PDB的变化与隔离

CDB和PDB的职责分离一些数据库管理员管理整个CDB,而另一些管理员管理单个的pdb。.管理整个CDB的dba作为普通用户连接到CDB,管理整个CDB和根的属性,以及pdb的一些属性。例如,这些dba可以创建、拔出、插入和删除pdb。它们还可以为根…

【c语言】文件操作详解

主页:114514的代码大冒险 qq:2188956112(欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ ) Gitee:庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 目录 前言 一、文件是什么 二、文件的打开和关闭 1.文件指针 2.文件的打开和关闭 三,文件的顺…

《计算机体系结构量化研究方法》 B.4 虚拟存储器 笔记

B.4 虚拟存储器 一、基本概念 1、虚拟存储器把物理存储器划分成块以后分配给不同的进程;采用一种保护机制来限制各个进程,使其仅能访问属于自己的块。 2、重定位机制允许同一程序在物理存储器中的任意位置运行。 3、页和段用于块,缺页错误…

SSM框架整合入门案例

文章目录SSM整合案例1,SSM整合1.1 流程分析1.2 整合配置步骤1:创建Maven的web项目步骤2:添加依赖步骤3:创建项目包结构步骤4:创建SpringConfig配置类步骤5:创建JdbcConfig配置类步骤6:创建MybatisConfig配置类步骤7:创建jdbc.properties步骤8:创建Spring…

《Buildozer打包实战指南》第七节 常见的打包问题

目录 无法访问xxx网址,连接超时 目标路径xxx已经存在,并且不是一个空目录 每次打包时间都要很久 待更新 在打包过程中难免会碰到一些问题,在本节,笔者会把自己碰到的一些问题的解决方案写出来,好让读者节省时间。 …

KaiwuDB CTO 魏可伟:1.0 时序数据库技术解读

大家好,首先非常感谢大家参与本次 KaiwuDB 1.0 系列产品发布会。作为国内数据库新生品牌力量,KaiwuDB 是浪潮集团控股的数据库企业,我们聚焦在工业物联网、数字能源、交通车联网、智慧产业等快速发展的重要领域,希望为各大行业客户…

06技术太卷我学APEX-技术太卷我学APEX

06技术太卷我学APEX-技术太卷我学APEX 0 概述 自学APEX第7天,用APEX做了一个自学的笔记APP,名称就叫《技术太卷我学APEX》 1 登录页面 登录页面设置:就改了下名称和加上了测试账号。 登录页面效果: 这个是 APEX功能页面之一…

前端面试题合集-第一篇

前端面试题合集-第一篇 🔔每周不定时更新! ⛄️不要让自己失去竞争力! ☀️哪里都不是避风港,保持竞争力! 1. CSS选择器的优先级 !important>内联>id选择器>类选择器>标签选择器>通配符选择器>继承 在同一…

Java IO流补充 - Properties - IO流框架commons-io

文章目录IO流补充知识Properties结合IO流集合IO流框架IO流补充知识 Properties结合IO流集合 我们先来认识Properties属性集对象 Properties其实就是一个Map集合,但是我们一般不会当集合使用,因为HashMap更好用。 Properties核心作用: 属性文件&#xf…

设计模式_行为型模式 -《观察者模式》

设计模式_行为型模式 -《观察者模式》 笔记整理自 黑马程序员Java设计模式详解, 23种Java设计模式(图解框架源码分析实战) 概述 定义 观察者模式,又被称为发布-订阅(Publish / Subscribe)模式&#xff0c…

RSA与证书

这篇文章详细讲述一下RSA与证书的相关内容。内容有点多,但都是干货。 一、RSA算法 1.1简介 RSA算法是由美国三位科学家Rivest、Shamir和Adleman于1976年提出并在1978年正式发表的公开密码算 法,其命名取自三位创始人名字的首字母缩写。该算法基于数论…

CSS 计数器

CSS 计数器 CSS 计数器可让你根据内容在文档中的位置调整其显示的外观。例如,你可以使用计数器自动为网页中的标题编号,或者更改有序列表的编号。 本质上 CSS 计数器是由 CSS 维护的变量,这些变量可能根据 CSS 规则跟踪使用次数以递增或递减…

【Git】利用 GIT 做版本控制

目录 写在前面 备份方法 效果展示 写在前面 在做项目开发时,不免需要进行版本更替或者使增加新功能等,这时很重要的环节是对版本进行备份,以便在新版本开发过程中出现问题,而当工程文件过大时,在对文件备份时需要占…

Java——多线程01(创建和启动,优先级调度,守护线程,出让/礼让线程,插队/插入线程)

目录1.多线程的创建和启动方式1.线程第一种启动方式(继承Thread类)2.多线程的第二种启动方式实现Runnable接口3.多线程的第三种启动方式实现Callable接口2.Thread多线程中的方法1.getName(), setName(),currentThread(),sleep2.Thread优先级调度方法3.守…

【手把手教你学会51单片机】数码管的动态显示

注:本文章转载自《手把手教你学习51单片机》!因转载需要原文链接,故无法选择转载! 如若侵权,请联系我进行删除!上传至网络博客目的为了记录自己学习的过程的同时,同时能够帮助其他一同学习的小伙…

类的初始化2023018

类的初始化: 第一次使用某个类,例如Person类,系统通常会在第一次使用Person类时加载这个类并初始化这个类。在类的准备阶段,系统将会为该类的类变量分配内存空间,并指定默认初始值。当Person类初始化完成后&#xff0c…