【多线程】进程与线程

🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈

在这里插入图片描述

文章目录

  • 1. 操作系统
  • 2. 进程
    • 2.1 进程是什么
    • 2.2 进程管理
    • 2.3 进程调度
    • 2.3 内存管理
    • 2.4 进程间通信
  • 3. 线程
    • 3.1 线程是什么
    • 3.2 多线程编程
    • 3.3 线程与进程联系与区别

1. 操作系统

概念】是一个软件,是一组做计算机资源管理的软件统称,非常复杂,所以操作系统本身是一个很大的话题(这里简单了解,引入进程概念)
常见的操作系统
在这里插入图片描述
基本功能
1)防止硬件被时空的应用程序滥用
2)向应用程序提供简单一致的机制来控制复杂低级硬件设备
在这里插入图片描述
对上】要给软件提供稳定的运行环境
对下】要管理好各种硬件设备
操作系统的功能非常多,其中一个与我们密切相关的功能模块—>进程管理
接下来让我们一起来看看,进程是什么吧~~~

2. 进程

2.1 进程是什么

进程】也称作任务一个运行起来的程序,就是进程~
在这里插入图片描述
这个.exe是一个可执行文件,即程序,当我们双击这个exe,这个程序微信就运行起来,在系统中形成一个进程
即进程是操作系统对一个正在运行的程序的一种抽象,可以把进程看做程序的一次运行过程
基本单位进程是操作系统进行资源分配基本单位
(此处涉及到的资源包括不限于内存,硬盘,CPU等等)
在任务管理器中,我们可以看到电脑的进程,打开任务管理器的快捷键为Ctrl+Alt+Del,如图:
在这里插入图片描述
通过任务管理器,我们能看到系统中有如此多的进程都在跑着!那么进程有如此之多,如何去管理呢~

2.2 进程管理

所谓进程管理,即进程多了才需要管理,分为以下两步:

1)描述一个进程:使用结构体/类,表示一个进程的信息
2)组织这些进程:使用一定的数据结构,把这些结构体/对象放到一起

举一个生活中常见的栗子叭~
一个大型超市,有特别多的商品,超市需要管理这些商品,建立一个商品信息管理系统,需要做:
1)明确每个商品的相关信息(价格、生产日期等)
2)通过一定的数据结构将这些商品信息都组织起来(如通过表格等)

2.3 进程调度

进程调度概念】操作系统对CPU资源的分配,采用时间模式,不同的进程在不同的时间段去使用 CPU 资源即为进程调度~
先来了解进程的基本知识叭~
在Java中,我们通过类/对象描述这个特征,即每一个PCB对象代表一个在运行的程序即进程
进程类—> PCB(process control block)

class PCB {
//属性1 pid
//属性2 内存指针
//属性3 文件描述表
//属性4 进程调度信息
//...
}

操作系统再通过数据结构把PCB对象组织起来,往往使用双向链表来组织PCB对象,进程相当于链表中的节点,方便管理时进行增删改查的操作

  1. 创建一个进程,即创建一个链表的节点
  2. 销毁一个进程,即把链表的节点删除
  3. 遍历进程列表,即遍历链表

PCB中的属性非常多,在这里枚举4个核心的属性:
1)pid
每个进程需要有一个唯一的身份标识(如每个人都有独一无二的身份证~~)
2)内存指针
当前这个进程使用的内存是哪一部分(进程要跑起来,就需要消耗一定的硬件资源,比如内存~进程运行的时候,使用哪些内存上的资源)
3)文件描述符表
进程每次打开一个文件,就会产生一个"文件描述符",标识了这个被打开的文件,一个进程可能会打开很多文件,对应一组文件描述符,把这些文件描述符放到一个顺序表这样的结构,构成文件描述符表
4)进程调度信息
这一组属性都是描述和CPU资源相关的属性,这些属性都辅助进行进程调度
预备知识】先来了解了解CPU!
我们的程序能运行,全靠CPU,每一个程序相当于一组"二进制指令"的集合
CPU中的一个概念:核心数(在任务管理器中可以看到我们电脑的核心数)
在这里插入图片描述
这个表示16核32线程,即CPU里有16个核心,每个核心顶两个!16个人可以干32个人的活~
但是我们可以看到一个电脑上可以运行很多程序,不止这些,那么计算机是如何做的呢~
并行】同一时刻,两个核心同时执行两个进程,此时这两个进程就是并行执行的(强调同时)
并发】一个核心先执行进程1执行一会后再去执行进程2…只要这里切换进程的速度足够快,看起来进程1和2就是"同时"进行的
所以虽然只有这些核心,但是也可以同时执行很多很多个任务啦~
在计算机中,通过并行+并发的方式来完成的(由操作系统控制,我们感知不到的~)所以很多时候把并行+并发统称为并发!
进程调度意义】如上所述,进程调度就是为了解决电脑核心数是固定的但是电脑有很多程序要运行的问题~
A) 进程状态
简单认为进程状态主要是这两个:
就绪态】该进程已准备好,随时可以上CPU执行
阻塞态】该进程暂时无法上CPU执行
B)进程的优先级
进程之间的调度不一定是"公平"的,有的会优先调度(在现实生活中,我们也会将事情根据重要性排个序,有的事情就需要优先做~)
C) 进程的上下文
即描述当前进程执行到哪里的"存档记录",进程在暂时离开CPU时把当前运行的中间结果进行"存档",等下次进程回到CPU执行时,恢复之前的"存档",从上次的结果继续往后执行(即记录离开结果,这样回来时我可以从离开的地方继续执行)具体过程如下:
在这里插入图片描述
D)进程的记账信息
统计了每个进程在CPU上执行多久(这个可以作为调度的参考依据~)

2.3 内存管理

操作系统对内存资源的分配,采用空间模式,不同进程使用内存中的不同区域,互相之间不会干扰,相互独立的~
每个进程访问的内存地址并不是真实的物理内存地址,操作系统给进程分配的内存是以"虚拟地址空间"的方式进行分配的~
直接访问物理内存地址缺点】如果进程1内容改变则会可能会影响进程2的内存内容
(比如进程1数组下标越界、野指针情况等)
虚拟地址空间优点
在这里插入图片描述解释说明】站在进程角度,它们的代码操作的内存地址是图中0x00-0x33这一段,这里访问的内存就会被操作系统自动映射到真实的物理内存上,当然进程自己是感受不到实际物理内存地址是什么的,如果进程1代码出bug,就没有什么影响,因为任何一个内存操作都需要通过页表翻译,如果拿着这个地址发现页表没有这个地址,则不会翻译,也就不会修改真正物理内存,即不会对进程2的内存数据进行干扰
1)方便校验,当前地址是否有效
2)一个进程无法直接影响另一个进程的内存内容,每个地址都有自己独立的地址空间,具有独立性
3)大大提升操作系统的稳定性

2.4 进程间通信

进程是操作系统进行资源分配的最小单位,即各个进程互相之间是无法感受到对方存在的,是相互独立的,这样进程之间互相具备"隔离性",但有时候需要进程之间进行交互,相互配合~
进程间通信】即在隔离性前提下,找一个公共区域,让进程借助这个区域完成数据交换
实现方式】操作系统提供进程间通信具体实现方式,有很多种,如以下:
1)管道 2)共享内存 3)文件 4)信号 5)消息队列 6)网络 等等
其中网络是一种相对特殊的 IPC 机制,支持同主机也支持同一网络内部非同一主机,进行进程间通信

3. 线程

3.1 线程是什么

线程】是更轻量的进程,约定:一个进程中可以包含多个线程,此时这多个线程的每一个线程都是一个可以调度执行一个独立的"执行流",多个线程之间也是并发执行(多个线程可能是在多个CPU核心同时运行,也可能是在一个CPU核心上,通过快速调度进行运行),同时这些线程共用同一份进程的系统资源
即对于线程来说,系统资源已经分配好,创建线程就省下分配资源开销,但是创建进程则需要系统分配资源,较耗时~
为什么资源分配如此耗时
比如系统要给进程分配一块内存需要做的以及遇到的情况:
1)系统需遍历自己的空闲内存的表(数据结构) 找到差不多的空间,进行分配内存
2)很多进程都在向系统申请资源~但是系统进行资源分配时候,得一个个来,很耗时
为什么要线程
(1) 并发编程能更充分利用多核 CPU 资源,多进程编程和多线程编程都满足并发编程需求场景(并发编程即同一时刻要运行多个任务)
(2) 线程比进程更轻量,进程创建、销毁、调度成本高且速度慢不高效,线程则相反,线程创建、销毁、调度成本比进程~(只有在进程启动,创建第一个线程的时候,需花成本去申请系统资源,一旦进程创建完毕,后续再创建的线程,就不需要再申请资源,这样创建/销毁的效率大大提高)
(3) 在Java中不鼓励多进程编程,非常鼓励多线程编程~

3.2 多线程编程

意义】解决并发编程问题
举个栗子吧!更加深入理解一下多进程和多线程编程~
比如想加工一大批零件,有两种做法:
一是再建一个工厂重新再搭一套机器(多进程)
在这里插入图片描述此时这两套机器可以同时生产,不过这种方式需要再建立一个工厂,建工厂比较麻烦,成本较高,但这两个工厂之间是相互独立的,相互不影响~
二是还在当前工厂,引进机器再弄一套生产线(多线程)
在这里插入图片描述
这两套机器也可以各自独立生产,是两个独立的执行流,共用同一个资源工厂,除工厂共用,存储原料/成品/仓库/物流运输等等,都能共用,成本降低~
这两种方式均提高了工厂的生产效率,进程相当于工厂,线程相当于流水线~
多进程工厂方式,需多建工厂,开销大,且两机器之间看不到对方进度
多线程工厂方式,有两个机器,共用一个工厂,可以互相了解对方进度
此时想要生产更多的零件,在工厂内弄更多的机器,以此提高生产效率,但是并不是越多越好,如下图:
在这里插入图片描述
1)一个工厂的大小提供的空间是固定的即CPU核心数是固定的,此时想进一步提高机器的数量,工厂已经没有空余位置了,机器只能在工厂外干着急~这时,程序的效率并没进一步提升,可能不仅没提升,可能还会下降,因为调度本身也是有开销的,调度上一个机器,需要把之前的机器移出来,再把这个机器移进去,有开销,总并发程度依旧固定
2)机器是有脾气的,在这个调度来调度去的过程中,可能很生气很累,出现异常,如果一个线程出现异常,可能会带走整个进程!
在我们的电脑中:
1)在同一程序中,内部需要并发完成多组任务,此时使用多线程比较合适(比如微信,可以同时的视频,也可以聊天,网络传输等等)
2)多个程序之间,此时是多进程,进程之间具有"隔离性"(比如微信是一个进程,qq是一个进程等等)
所以多进程和多线程在电脑中是同时存在的~不是多线程代替了全部!且多进程和多线程都是可以并发和并行的

3.3 线程与进程联系与区别

联系
进程包含线程,一个进程可以有多个线程
区别

(1) 进程有自己独立的内存空间和文件描述符表,同一进程多个线程之间共享同一份地址空间和文件描述符表
(2) 进程是操作系统资源分配的基本单位,线程是操作系统调度执行的基本单位
(3) 进程具有独立性,一个进程不会影响另一个进程,但在同一进程的多个线程之间,一个线程挂了,可能会把整个线程带走,影响其它线程~
(4) 进程开销大,消耗资源多,线程执行开销小,但不利于资源的管理和保护

💛💛💛本期内容回顾💛💛💛
在这里插入图片描述
✨✨✨本期内容到此结束啦~下期再见!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机组成原理-流水CPU-指令流水

一、指令流水的定义 指令流水线是计算机处理器中的一种设计,用于提高指令执行的效率。考虑到执行指令的每个阶段用到的硬件不同,它将处理指令的各个步骤分解为若干个阶段,并允许多个指令在同一时刻在不同的阶段执行,从而实现指令…

目标检测6:采用yolov8, RK3568推理的性能

最近有个小伙伴,问我rk3568上推理图片,1秒能达到多少? 本次采用模型为yolov8s.rknn,作了一次验证。 解析一段视频文件,1280*720, fps 24。读取视频文件,然后进行推理。 通过性能优化,发现推理…

网络安全快速入门(十七)计划任务

17.1 前言 在上一章节我们简单了解了Linux软件管理的一些相关操作,而在这张内容,我们来讲一下计划任务!计划任务,本质上来说就是特定的时间执行一些命令,因此被称为计划任务,我们接下来就具体来了解一下吧&…

01-Java和Android环境配置

appium是做app自动化测试最火的一个框架,它的主要优势是支持android和ios,同时也支持Java和Python脚本语言。而学习appium最大的难处在于环境的安装配置,本文主要介绍Java和Android环境配置,在后续文章中将会介绍appium的安装和具…

TextCtrl输入文本类

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 wx.StaticText类只能够用于显示纯粹的静态文本,但是有时需要输入文本与用户进行交互,此时,就需要使用wx.TextCtrl…

DataX(DataX简介、部署、同步数据)

DataX(DataX简介、部署、同步数据) ☀快乐无限 法力无边 目录 DataX(DataX简介、部署、同步数据) 1.DataX简介 1)数据采集模块: 2)数据写入模块: 2.DataX部署 1)Da…

人工智能超万卡集群的设计架构解读

超万卡集群的核心设计原则和总体架构 超万卡集群建设正起步,现主要依赖英伟达GPU及其配套设备。英伟达GPU在大模型训练中优势显著。国产AI芯片虽在政策与应用驱动下取得进步,但整体性能与生态建设仍有不足。构建一个基于国产生态、技术领先的超万卡集群&…

怎么找抖音高清视频素材下载网站

对于抖音视频创作者来说,找到合适的高清视频素材是提升视频质量和吸引观众关注的关键。高清视频素材可以使内容更具视觉冲击力,从而增加视频的观看次数和互动率。本文将介绍几个提供高清视频素材的下载网站,帮助你制作出更吸引人的抖音视频。…

电子画册制作与传统画册相比,有哪些优势?

在当今数字化时代,电子画册作为一种新兴的媒体形式,其制作与传统画册相比具有显著的优势。以下是对这些优势的详细探讨。 首先,电子画册的制作过程通常更加便捷和经济。相较于传统画册需要经历的繁琐的印刷过程,电子画册的制作大多…

浅谈内联钩取原理与实现

前言 导入地址表钩取的方法容易实现但是存在缺陷,若需要钩取的函数不存在导入地址表中,那么我们就无法进行钩取,出现以下几种情况时,导入函数是不会存储在导入地址表中的。 延迟加载:当导入函数还没调用时&#xff0…

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(七)---- 系统调用函数与GDB(Lab: system calls)

系列文章目录 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(一)---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)---- 课程实验环境搭建&am…

深入理解rtmp(一)之开发环境搭建

深入理解rtmp(一)之开发环境搭建 手机直播在15年的时候突然火起来,随着花椒,映客等出现,直播一下就出现在了风口,各个公司针对直播的战斗迅速打响,战斗过程比较短暂,随着许多公司的退出和死去,手机直播行业趋于稳定,直播服务时长也被传统的CDN厂商牢牢占据,后面大家又把精力投…

3.Mongodb 复制集RS

MongoDB复制集是Mongodb提供的一种高可用和数据冗余的解决方案,复制集由多个MongoDB服务器组成,其中一个服务器作为主节点(Primary),处理所有写操作,而其他服务器作为从节点(Secondary&#xff…

超越 Transformer开启高效开放语言模型的新篇章

在人工智能快速发展的今天,对于高效且性能卓越的语言模型的追求,促使谷歌DeepMind团队开发出了RecurrentGemma这一突破性模型。这款新型模型在论文《RecurrentGemma:超越Transformers的高效开放语言模型》中得到了详细介绍,它通过…

【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt窗口 | 标准对话框 | 文件对话框QFileDialog 文章编号:Q…

闪烁圆点加载动画

效果图: 完整代码: <!DOCTYPE html> <html> <head><meta charset="UTF-8" /><title>闪烁圆点加载动画</title><style type="text/css">body {background: #ECF0F1;display: flex;justify-content: center;al…

正在进行时!西有毕加索 东有郭泰来 —— 郭泰来现代艺术大展开幕了

仅10天时间&#xff01;关于郭泰来先生及其作品已经在包括人民日报等央媒在内的2000加媒体竞相报道&#xff0c;印象中在美术界应该是头一次&#xff01;为何有这么大的热度&#xff0c;当然还是因为他这个人和他的作品。现在&#xff0c;见真章的时候到了&#xff0c;由北京国…

文心一言开通后吐槽下

如果你想购买,不推荐,速度慢,然后很多情况下真的不如gpt3.5 总的来说,不推荐使用和续费 光是生成速度就落后一大截了.........亏我还开了会员,操蛋速度慢,还会出现火爆使用 生成速度太慢了 大概2~3分钟左右才处理好 切出网页标签还不能生成了! 这一点真无语,必须要一直看着……

SpringBoot调用WebService的实践

作者所在公司的系统间的信息交互是通过webservice完成。如&#xff1a;MES与SAP的交互&#xff0c;MES与WMS的交换&#xff0c;MES与SRM的交互&#xff0c;MES与IOT的交互等。 MES是用.NET VS2008 C#写的&#xff0c;调用webservice很简单&#xff0c;这里不再赘述。如有想了解…