【多线程奇妙屋】能把进程和线程讲的这么透彻的,没有20年功夫还真不行【0基础也能看懂】

news2024/9/30 14:55:24

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言

而是理解过并总结出来通俗易懂的大白话,

小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.

🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

在这里插入图片描述

在这样一个充满无限可能的时代,我们正站在科技、文化与创新的交汇点上,每一天都有新的故事等待被讲述。从遥远星系的奥秘到微观世界的奇妙,从人类历史的深邃长河到未来梦想的璀璨星辰,每一个领域都蕴藏着无尽的知识和智慧。让我们一起探索未知,挑战极限,共同书写属于我们的精彩篇章

前言

在上篇的计算机组成原理中,我们认知到了计算机的构成和背后的工作原理,学习到了冯诺依曼体系结构和 CPU的重要指标 ,以及 操作系统 的作用, 相关的 指标 和 基本的工作原理

而本篇文章中讲提及一个更重要也是 面试中常考的的重要的热门点 之一 —— 进程和线程

废话不多说,咱们直接上菜吧 🤤 🤤 🤤 🤤

目录

  1. 进程的初识

  2. 线程的初识

  3. 线程和进程的关系

  4. 线程的缺陷

一. 进程的初识

1. 进程的引入

上一篇我们提及到

在以前,CPU只有 一个核心 ,但是却可能实现多个进程的执行,那是因为 分时复用 (先执行一个进程, 再转过来 执行另外一个进程 ) 同样也能达到我们 多个进程(任务)的同时进行 。像这种我们称为 并发执行

而如今我们 CPU有多个核心, 就可以实现多个 进程的执行 , 让多个CPU的核心同时执行, 这样的也就能大幅度的 提高效率 。 而这种我们称之为 并行执行

通过写代码可以把 多个CPU核心都利用起来 , 这样的编程,我们就称之为 并发编程

而我们把 并发和并行 的两种的执行过程,都可以称之为 并发编程

还不了解的小伙伴可以参考小编的上篇文章

进程的并发执行文章链接

那么我们谈及的进程到底什么呢? 他发挥着什么作用呢? 不妨看看下面的简介吧 ! ! !

1. 进程的简介

像上面我们利用 多个CPU核心 ,实现多进程的就是我们 多进程编程

所以进程本质上 系统管理的软件资源 , 也称为 任务

多进程编程 是我们典型的 并发编程

多进程的虽然能解决多任务的问题,但如今对于效率的要求越来越高,同时也存在一些问题。

2. 多进程的不足

在 操作系统中, 进程的创建和销毁都会 ==消耗的较大的时间和空间 ==。

因为当执行一个 .exe 的程序(双击) 时, 操作系统 本身就会消耗这个程序的执行进程 分配系统资源 的过程。

而当 关闭这个程序运行 的时候, 就需要 销毁进程 , 就会产生 释放系统资源 的过程

虽然多进程编程能让开发者把 一个任务 分配给 多个进程同时执行 , 能够 加快效率

但一旦场景需要 , 我们就需要不断的 频繁创建销毁进程 , 由于比较 重量级的 , 这样的 开销是很大

鱼式疯言

  1. 栗子说明
    试想一下这样的场景: 针对我们 服务器开发

客户端 每次发来的请求访问 , 都需要单独的 创建和销毁一次进程 ,由这个进程负责对 客户端提供服务 , 试想一下这样的开销的程度 !!!

进程的本质
用一句话概括就是 :

进程 是 系统分配资源 的基本单位

那么对于上面问题, 我们该如何解决了 ? ? ?

二. 线程的初识

1. 线程的引入

上面我们说到对于一个 ==可执行程序 .exe 文件 ==来说, 当我们执行程序(双击) , 系统就会创建进程,给这个程序分配 各种系统资源 (CPU, 内存,硬盘, 网络带宽…) .

同时 创建进程的过程 中,也会创建一系列的 线程 , 让这些线程在CPU上调度执行

所以线程的作用, 就是让程序在内存中利用 CPU核心调度执行

2. 线程的优势

回忆我们学习进程的问题,最大的不足就是进程很“重”, 每次创建/ 销毁的开销很大。

而线程的引入就直接解决了 进程开销大 的问题

因为线程创建是没有进程的创建时需要 分配系统资源 过程的。

线程是 微量的进程 , 当一个进程分配好一个系统资源后,线程就可以在进程分配好的资源下 共用同一份系统资源

3. 举个栗子

<1>. 假如现在有个滑稽 在吃100只鸡 (一个房间, 一张桌子,和一个滑稽)

在这里插入图片描述

<2>. 为了提高吃鸡效率,我们引入了 多进程方案

创建 两个房间, 两张桌子,分别分出各50只鸡

在这里插入图片描述

这样的让两个滑稽同时 吃50只,效率就增加了不少 , 但是我们同时 也需要开销创建房间,桌子… 的过程。 这样的过程就比较 “重”

<3>. 引入多线程

让两个滑稽同时在同一个房间,同一张桌子上吃, 这样不仅提高了效率, 还省去了 多创建一个房间和桌子的过程
在这里插入图片描述

<4>. 如果多创建多个线程呢

创建了4个滑稽,每个滑稽平均吃25只,这样的话,速度又进一步提高
在这里插入图片描述

<5>. 但是如果创建 很多个线程
在这里插入图片描述

这时就会出现 问题 ,会出现相互竞争的情况,有可能还会导致 整个进程都崩溃 。 这个具体下一节小编会细细道来。

鱼式疯言

总结三句话

进程 是系统 资源分配 的基本单位

相当于 创建大工厂 相似。

线程 是系统 调度执行 的基本单位

相当于 征用工人工作 相似。

三. 进程与线程的关系

在这里插入图片描述

在上一篇文章中,我们谈到 进程是用一个 PCB这样的结构体 来描述并用 链表结构 来组织的。

其实这句话,是针对只含有 含有一个线程的进程 来说。

本质上是

  • 一个 进程 中包含一组 PCB这样复杂的 PCB结构体 , 并用 链式结构 来组织的

  • 一个 线程 是 一个 PCB 结构体来描述,并用 链式结构 来组织的。

  • 所以 进程包含线程 , 并且 一个进程 是可以包含 多个线程 的。

并且当 一个进程 创建好, 系统资源分配完成 , 同时就会 一个 或 多个线程

但是一个进程中是 不能没有线程的 ,因为线程是 系统调度执行 的基本单位。

  • 并且这个线程是 共用同一份系统资源

  • 所以也就是为什么说, 线程是 微量的进程,不需要再分配资源, 就 不需要 额外的去开销

  • 但是每一个线程中的 优先级上下文记账信息 这些单独的属性都是 独立不同的

这点小伙伴们一定要区分开哦

鱼式疯言

一句话概括:

进程 包含线程,每个进程至少 有一个 线程 ,虽然线程共用同一份资源, 但每个线程的 属性相互独立

四. 线程的缺陷

如果我们不断的 创建线程的数目 ,就会出现下面问题。
在这里插入图片描述

像上面,如果我们线程创建过多, 桌子只有一张, 资源也只有那么多, 那么线程和线程之间就会 发生竞争,就会出现抢占资源的情况。

这样的执行效率就不会进一步的提升,反而还有可能减慢。

原因就是我们因为微观上 并发执行 的效果就 无法进一步提高 , 系统资源也只有那么多,CPU的核心也只有那么多 , 不能充分利用好线程, 执行一个任务转而接着执行另外一个任务。

可以理解为 通道 只有那么大,能运行 并发执行的线程 已经到达 上限了。

那么唯一的解决方案, 增加CPU的核心, 从提高 并行执行 的效率, 让 不同线程同时执行不同的任务 ,从而 有效的提高速度

关于 CPU核心知识

CPU的核心数文章详解

那么我们就可以理解为把 管道变宽 , 让能通过的线程变多, 自然就 速度加快,效率提高

鱼式疯言

有着 大量的线程就会出现竞争 ,如果 竞争激烈 的话, 一个线程的崩溃,就会 抛出异常

如果异常处理不当的话,就会导致整个进程都出现崩溃,进而就会带走 其他线程,造成 整个程序的崩溃

补充知识

但是每个进程之间是不影响的,当 进程进程 之间是 相互独立 的,一个进程的崩溃是不会影响其他进程的执行的。

总结

  • 进程的初识 :认识到进程是系统管理的软件资源, 是系统资源的基本单位, 但很"重”量, 创建/ 销毁进程消耗大。

  • 线程的初识: 线程是微量的进程,创建和销毁不需要额外消耗空间和时间, 是系统执行的基本单位

  • 线程和进程的关系: 进程包含线程, 进程至少要含有一个线程, 每个线程都有自己独有的属性。

  • 线程的缺陷 : 线程创建过多,就会出现资源不足,造成竞争激烈,进程停止,程序崩溃的问题。

如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正

希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖

在这里插入图片描述

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

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

相关文章

OpenGL ES 顶点缓冲区和布局(3)

OpenGL ES 顶点缓冲区和布局(3) 简述 顶点缓冲区的本质就是一段GPU上的显存&#xff0c;我们通过绑定顶点缓冲区的方式来将数据从CPU传到GPU。 我们之前在绘制三角形的例子中&#xff0c;我们往顶点缓冲区只传入了坐标&#xff0c;但是其实顶点是可以包含很多数据的&#xff…

指定PDF或图片多个识别区域,识别区域文字,并导出到Excel文件中

常见场景 用户有大量图片/PDF文件&#xff0c;期望能将图片/PDF中的多个区域中的文字批量识别出来&#xff0c;并导入到Excel文件中。期望工具可以批量处理、离线识别&#xff08;保证数据安全性&#xff09;。手工操作麻烦。具体场景&#xff1a;用户有工程现场照片&#xff…

xgboost cross validation

在R中使用xgboost 假设X为训练数据&#xff0c;y为label&#xff0c;为0或者1.用xgboost建立分类模型代码如下 调用caret包中的createFolds方法&#xff0c;进行10倍交叉验证 最后画出AUC曲线 library(xgboost) library(caret) library(caTools) library(pROC)set.seed(123) …

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十一章 Linux 帮助手册讲解

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

3DGS中Densification梯度累计策略的改进——绝对梯度策略(Gaussian Opacity Fields)

在学习 StreetGS 代码中发现了其中的 Densification 策略与原 3DGS 不太一样&#xff0c;其是使用的 Gaussian Opacity Fields 中的一个的策略 我们先来回忆一下 3DGS 中一个比较重要 contribution&#xff1a;自适应密度控制 1 自适应密度控制 其具体步骤如下&#xff1a; …

概率论——随机分布

离散型——二项分布 X ~ B&#xff08;n , p&#xff09; 例题&#xff1a; 例题二&#xff1a; 离散型——泊松分布 例题 注意&#xff1a;记住题二的结论&#xff01;&#xff01;&#xff01; 连续性——均匀分布 例题&#xff1a;求解概率密度&#xff08;具体方法见随机…

请问PMP英文报名被审查该怎么通过?

审核抽查是随机进行的&#xff08;一般概率约为30%&#xff09;&#xff0c;并非所有人都会接受资料抽查。如果您报考了机构&#xff0c;他们会协助您解决这个问题。 一、资料审查&#xff1a; 如果被PMI选中进行审查&#xff0c;这是正常情况&#xff0c;不必惊慌。如果你参…

要洞察数字化本质,才能形成破局之道...

在深入探索数字化转型的突破路径之前&#xff0c;首要之务是构筑对数字化及其转型过程的深刻而准确的认知体系。唯有透彻理解数字化的内在本质&#xff0c;精准把握数字化转型的演变规律&#xff0c;方能引领数字化转型的航向&#xff0c;确保数字化工具与策略得以高效、精准地…

(一)万字详解G1垃圾收集器 —G1的设计目标是什么?G1的分区是什么?卡表的作用和工作原理?如何解决漏标问题?

一、G1垃圾收集器简介 G1 GC&#xff08;Garbage-First Garbage Collector&#xff09;是一款先进的垃圾收集器&#xff0c;通过 -XX:UseG1GC 参数启用。它首次亮相于JDK 6u14版本&#xff0c;并在JDK 7u4中正式发布。对于熟悉JVM的开发者而言&#xff0c;G1已是一个广为人知的…

测试卡(1)灰卡

#灵感# 灰卡为什么是18%&#xff1f;文章分为三部分&#xff0c;前部分&#xff0c;解释灰卡的定义&#xff0c;后部分是 市场买的18%灰卡的说明书&#xff0c;其中穿插了网络上搜到的灰卡使用案例。 目录 18% 中性灰卡应用说明 1&#xff09; 曝光水平 例子&#xff1a;用灰…

ppt模板如何制作?建议试试这4招

在追求效率和简洁的现代办公环境中&#xff0c;简约风格的PPT模板因其清晰、直观的特点而备受青睐。制作一个简约的PPT模板不仅能提升演示的专业感&#xff0c;还能帮助观众快速抓住重点。 今天&#xff0c;我来告诉大家&#xff1a;ppt模板简约怎么制作&#xff1f;让你能够利…

Kubernetes 节点何时处于就绪状态?

在 Kubernetes 中&#xff0c;节点&#xff08;Node&#xff09;是一个工作负载的基本单元&#xff0c;容器被部署和运行在这些节点上。每个 Kubernetes 节点在加入集群后都需要经过一定的健康检查和状态评估&#xff0c;才能被集群标记为“就绪”状态。这一过程的关键是节点的…

Linux相关概念和重要知识点(9)(父进程、子进程、进程状态)

1.父进程、子进程 &#xff08;1&#xff09;父进程 CLI本质上是一款命令行界面的软件&#xff0c;是用户调用接口层面的程序&#xff08;上层&#xff0c;可以和系统调用接口做沟通&#xff09;&#xff0c;CLI和GUI是同级别的。用户的操作都是建立在CLI和GUI之上的。 但是…

奔三理工男适合转行做AI算法工程师吗?

奔三男生转行可以做什么&#xff1f; 干了几年开发程序员却面临降薪优化&#xff1f; 说实话&#xff0c;如果学历一般技术一般&#xff0c; 无法与时俱进的话&#xff0c;会容易面临尴尬情况…… 就业这件事&#xff0c;选对赛道方向至关重要&#xff01;&#xff01; 这…

profinet转ethercat连接伺服在工业现场的配置案例

在工业通信领域&#xff0c;Profinet 转 EtherCAT 网关的应用为实现不同工业网络之间的通信提供了有效的解决方案。以下是一个关于 Profinet 转 EtherCAT 网关链接伺服配置的案例。 首先&#xff0c;我们需要准备好相关的硬件设备&#xff0c;包括 Profinet 转 EtherCAT 网关、…

Docker Desktop 安装Centos 7.9 使用yum install不可用问题

安装centos镜像并run之后&#xff0c;使用yum install 命令安装出现如下错误&#xff0c;可使用此命令替换mirror。 报错信息&#xff1a; Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archaarch64&repoos&infracontainer error was…

2024第八届御网杯信息安全网络大赛线上WP详解(misc+cryoto)(详解-思路-脚本)

芜湖~ 首届御网杯线上和ISCC分开进行 但还是用的ISCC的页面差评 嘻嘻 又是玄乎的一天 以下是我自己的一些思路和解析 有什么问题或者建议随时都可以联系我 目录 附件 # Misc ##Notice ##编码转换 Brainfuck编码 jsfuck编码 Ook! 编码 ##bluetooth 导出压缩包 第一…

OpenGL 使用离屏渲染技术进行截图

文章目录 背景第三方库注意参考资料 一、离屏渲染&#xff08;一&#xff09;帧缓冲与帧缓冲对象&#xff08;FBO&#xff09;&#xff08;二&#xff09;附件&#xff08;Attachment&#xff09; 二、具体代码&#xff08;一&#xff09;主线程创建OpenGL窗口&#xff08;二&a…

python画图|自制渐变柱状图

在前述学习过程中&#xff0c;我们已经通过官网学习了如何绘制渐变的柱状图及其背景。 掌握一门技能的最佳检验方式就是通过实战&#xff0c;因此&#xff0c;本文尝试做一些渐变设计。 前述学习记录可查看链接&#xff1a; Python画图|渐变背景-CSDN博客 【1】柱状图渐变 …

CORE 中间件、wwwroot

ASP.NET Core中间件组件是被组装到应用程序管道中以处理HTTP请求和响应的软件组件&#xff08;从技术上来说&#xff0c;组件只是C&#xff03;类&#xff09;。 ASP.NET Core应用程序中的每个中间件组件都执行以下任务。 选择是否将 HTTP 请求传递给管道中的下一个组件。这可…