【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)

目录

  • 一、 进程
      • 1.1 PID(进程标识符)
      • 1.2 内存指针
      • 1.3 文件描述符表
      • 1.4 状态
      • 1.5 优先级
      • 1.6 记账信息
      • 1.7 上下文
  • 二、线程
  • 三、总结:进程和线程之间的区别(非常非常非常重要,面试必考题)

一、 进程

简单来介绍一下什么是进程,在我的理解中我是把每一个任务都当成一个进程,例如:我打开了电脑微信APP就是一个任务,也是一个进程。
在这里插入图片描述
这里的每一个任务都是进程,然后通过C++中的结构体,这里叫做PCB(进程控制块)来描述一个进程,然后通过链表将这些PCB给连接起来,当我们查看是就是遍历该链表,将存储的信息展示出来,当打开或是删除一个进程时,只需要在链表的头或尾进行插入和删除即可,每个进程都有一个结构体PCB,然后通过数据结构组织起来就形成上面的结果。

相比大家已经对PCB(进程控制块)有了一点了解,简单来说就是来描述一个进程的结构体,当然了,在结构体中是不是还有相当多的属性来组成这个结构体的,例如:上图中的状态、CPU…等都是PCB中的一个属性,也是我们接下来要学习的重点,这里我们学习PCB中的7大属性。

分别是:

  1. PID(进程标识符)
  2. 内存指针
  3. 文件描述符
  4. 状态
  5. 优先级
  6. 记账信息
  7. 上下文

所以说一个任务是一个进程,进程也就是系统分配资源的基本单位。
接下来让我们进入真正学习进程的内容了。

1.1 PID(进程标识符)

这个PID贼好理解,就记住PID的一个身份证或是一个数字,专门用来标记这个进程的,当然了,身份证是不重复的,这里的PID也不会有重复的同时出现,当你要使用该进程时,操作系统就会根据你的这个PID来迅速拿到这个进程。
在这里插入图片描述
上图可以看到,每一个进程都有一个PID,且是唯一的。

1.2 内存指针

按我的理解来说就是在创建该进程时,需要消耗一定的系统资源的,其中内存就是一种非常重要的资源,在整个电脑中,内存就那么大一点能让你随意使用吗?那肯定当然不是啦。

先从系统这里进行申请,系统分配给你一块,你才是可以使用,由内存指针指定了一块内存资源的区域,表示了你这个进程呀就在这块区域进行活动,且不能超出该区域,每个进程都必须使用自己申请到时候内存(一亩三分地)。

由于内存指针是进程创建时就已经开辟好了的,这里我们无法进行图片展示

总结来说:内存指针就是描述一个进程都能使用哪些内存资源的。

1.3 文件描述符表

内核为每个进程维护一个文件描述符表,该表记录了文件描述符的相关信息,包括文件描述符、指向打开文件表中记录的指针。
在这里插入图片描述

简单来说就是文件描述符表描述了一个进程对于内存资源使用的情况。
上图中的CPU、内存、以及磁盘都是文件描述符表对于该进程对内存资源使用的多少进行了统计。

1.4 状态

状态又分为阻塞状态和运行状态,在系统调度中心,若是要让 这个进程到CPU上进行执行就会将它的状态转变为就绪状态在执行中转变为运行状态,但是当不想让该进程进行执行时只需要将它转变为阻塞状态即可。
在这里插入图片描述

可以清楚的看到,这些状态一共有两种,一种是正在运行状态,一种是已挂起状态,已挂起状态也可以叫做阻塞状态。

1.5 优先级

优先级也很简单,我想问一下大家,当年同时运行王者荣耀打团时和微信聊天的时候,你要是CPU会先调度谁先来进行运行,很显然的我会先运行王者荣耀,但是计算机并不知道要先运行哪一个该怎么办?

这个时候就需要我们的优先级站出来了,优先级高的进程会优先进入CPU进行执行。

1.6 记账信息

简单来说就是针对每一个进程占据了多少CPU时间,进行了一个统计,然后会根据这个统计结果来进一步的调整调度的策略,确保在下一轮调整后的调度中,确保每一个进程都能进入CPU进行调度.

总结来说就是通过记账信息来进行动态的优化,让每一个进程都能进入CPU进行执行。

1.7 上下文

我们都知道在进程的调度中可能一个进程还没有执行完就被系统调度走了,难道下一次被调度回来时要重新执行前面执行了一半的吗?很显然不是这样的。

其实上下文有点向我们玩小游戏中的读档和存档,当打到第9关卡时不想玩了,就保存文档到上下文,当我们下一次想玩的时候在通过读取存档就可以继续上一次的关卡来进行了。

当进行进入CPU执行后被调度走时,会将当前处理的数据放在上下文中,当下一次重新被调度回来时在通过读取上下文信息进行继续执行。

二、线程

通过上面的学习我们知道了什么是进程,运行一个任务就是一个进程,那么什么是线程呢?可以理解为一个进程可以由一个或多个线程组成,系统在调度时会将一个进程分成多个线程来执行,当所有线程执行完,也就代表着该进程执行完了。

并且由于进程中进行频繁的创建和销毁时,会产生很大的开销(主要体现在资源的申请和释放上面),为什么进程会比线程开销大呢,举个例子:我打开王者荣耀就是一个进程,在刚进入加载界面时是不是会很慢,因为它要加载的数据很多很多,但是当我们进入后打开英雄界面或是匹配界面为什么会快秒出来呢,打开英雄界面就相当于是一个线程,匹配界面也是一个线程,当我关闭该界面(销毁线程时)处理很快,但是我要是关闭一个界面就需要重启一下游戏(进程)时,就知道多痛苦了,也可以看出来,一个进程可以由多个线程组合来完成工作,线程也可以称之为"轻量级进程"

因此说:线程是系统进行调度的基本单位
下图描述了进程和线程的关系。、
在这里插入图片描述
每一个进程在内存空间开辟一块属于自己的内存,他们之间相互独立,也叫做内存管理
在这里插入图片描述

第二个图片可以看出来,多个线程指向了同一块内存空间,而进程也是由一块空间组成,所以说进程由一个或多个线程构成,只是构成该进程的每一个线程的内存指针相同指向同一块区域,同时线程的文件描述符表也相同都是进程对内存资源的使用情况,当然了进程中其它的属性线程也都有,除了内存指针不同和文件描述符表不同之外,其它是属性和进程一样各不相同。

三、总结:进程和线程之间的区别(非常非常非常重要,面试必考题)

1.进程时系统进行资源分配时的基本单位,线程是系统调度执行时的基本单位

2.进程是包含线程的,一个进程可以由一个或多个线程组成

3.进程由一个或多个PCB组成,一个PCB包含的属性有PID、内存指针、文件描述符表、状态、优先级、记账信息以及上下文等诸多属性。

4…每个进程都有属于自己的资源,但同一个进程中的线程会共用这一份资源(该进程中线程的内存空间和文件描述符表相同)。

5.同一个进程中的线程也是一个独立的执行流,可以执行代码,并且可以单独的参与到CPU的调度中(该进程中 ,线程的PID,状态,优先级,记账信息,上下文相同的)。

6.进程和进程之间不会相互影响,因为他们的内存空间相互独立,也叫做:内存管理

7.进程间也可以相互交换信息,但需要CPU开辟一块公共空间用于交换,该过程叫做:进程间通信

8.同一个进程中的线程之间,可能会互相干扰,抛出异常,会影响到其它的线程,会把整个进程中的所有线程搞崩溃,从而引发线程安全问题。

9.同一个进程中的线程并不是越多越好,要能够合适,达到最大效率,如果线程太多了,调度开销也可能非常明显。

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

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

相关文章

[UE 虚幻引擎] DTLoadFbx 运行时加载FBX本地模型插件说明

本插件可以在打包后运行时动态加载FBX模型。 新建一个Actor 并添加一个 DT Runtime Fbx Component。 然后直接调用组件的函数 LoadFile 加载显示模型(注:不支持模型动画) FilePath : 加载模型的绝对路径。 Create Collision : 是否创建碰撞…

R语言探索与分析19-CPI的分析和研究

一、选题背景 CPI(居民消费价格指数)作为一个重要的宏观经济指标,扮演着评估通货膨胀和居民生活水平的关键角色。在湖北省这个经济活跃的地区,CPI的波动对于居民生活、企业经营以及政府宏观经济政策制定都具有重要的影响。因此&a…

单链表的排序

对一个单链表进行排序。 方法一:构造一个辅助的数组来排序。 Java构造一个集合来存储。先将链表内容存储到集合中去,再对集合进行排序,最后按照顺序取出集合中的数据即可。 public ListNode sortInLit(ListNode head) {if (head null || he…

Solon2分布式事件总线的应用价值探讨

随着现代软件系统的复杂性日益增加,微服务架构逐渐成为开发大型应用的主流选择。在这种架构下,服务之间的通信和协同变得至关重要。Solon2作为一个高性能的Java微服务框架,其分布式事件总线(Distributed Event Bus)为微…

国标GB/T 28181详解:国标GBT28181-2022的客户端主动发起历史视音频回放流程

目录 一、定义 二、作用 1、提供有效的数据回顾机制 2、增强监控系统的功能性 3、保障数据传输与存储的可靠性 4、实现精细化的操作与控制 5、促进监控系统的集成与发展 三、历史视音频回放的基本要求 四、命令流程 1、流程图 2、流程描述 五、协议接口 1、会话控…

网络空间安全数学基础·多项式环与有限域

5.1 多项式环(掌握) 5.2 多项式剩余类环(理解) 5.3 有限域(熟练) 5.1 多项式环 定义:设F是一个域,称是F上的一元多项式. 首项:如果an≠0,则称 a…

el-dialog给弹框标题后加图标,鼠标悬停显示详细内容

效果&#xff1a; 代码&#xff1a; <div slot"title" class"el-dialog__title">标题<el-tooltip effect"dark" placement"right"><div slot"content">鼠标悬停显示</div><i class"el-icon…

队列的讲解与实现

这里写目录标题 一、队列的概念及结构二、队列的实现(使用VS2022的C语言)1.初始化、销毁2.入队、出队3.返回队头元素、返回队尾元素、判空、返回有效元素个数 三、完整 Queue.c 源代码 一、队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端…

手机相册的排列方式探讨

不论你是不是程序员&#xff0c;你一定留意过一个问题&#xff1a;相册 App 基本都将图片裁剪成了居中的 1:1 正方形。那么手机相册 App&#xff0c;为什么要将图片切割成 1:1 正方形&#xff0c;然后以网格排列&#xff1f;是行业标准吗&#xff1f; 自适应图片宽度的图库&a…

vr样板房实景漫游展示制作解决了地产商难题

家具和软装销售中&#xff0c;如何直观展示产品优势一直是老板们的难题。口头描述往往难以让客户真正感受到产品的独特之处&#xff0c;这不仅影响了销售效果&#xff0c;也增加了沟通的难度。但现在&#xff0c;我们有了全新的解决方案——样板房VR全景编辑软件! 样板房VR全景…

SpringMVC:消息转换器

1. HttpMessageConvertor 简介 HttpMessageConverter是Spring MVC中非常重要的一个接口。翻译为&#xff1a;HTTP消息转换器。该接口下提供了很多实现类&#xff0c;不同的实现类有不同的转换方式。 转换器 如上图所示&#xff1a;HttpMessageConverter接口的可以将请求协议转…

数据结构之ArrayList与顺序表(上)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 顺序表的学习&#xff0c;点我 上面这篇博文是关于顺序表的基础知识&#xff0c;以及顺序表的实现。…

美团面试:百亿级分片,如何设计基因算法?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的架构类/设计类的场景题&#xff1a; 1.说说分库分表的基因算法&#xff1f…

【Linux】深入解析动静态库:原理、制作、使用与动态链接机制

文章目录 前言&#xff1a;1. 什么是动静态库2. 动静态库的制作和使用3. 动态库的查找问题4. 理解动态库的加载4.1. 站在系统的角度理解4.2. 编址、可执行程序4.3. 动态库动态链接和加载问题 总结&#xff1a; 前言&#xff1a; 在软件开发中&#xff0c;动静态库是两种重要的…

Netty中的ByteBuf使用介绍

ByteBuf有三类&#xff1a; 堆缓存区&#xff1a;JVM堆内存分配直接缓冲区&#xff1a;有计算机内存分配&#xff0c;JVM只是保留分配内存的地址信息&#xff0c;相对于堆内存方式较为昂贵&#xff1b;复合缓冲区&#xff1a;复合缓冲区CompositeByteBuf&#xff0c;它为多个B…

6月26~28日,2024北京国际消防展即将开幕!

随着社会的快速发展&#xff0c;消防安全日益受到广大民众的高度关注。为了进一步推动消防科技的创新与发展&#xff0c;提升全民消防安全意识&#xff0c;2024年北京消防展将于6月26日在北京国家会议中心盛大开展。目前:观众预登记已全面启动&#xff0c;广大市民和业界人士可…

Skins

本主题解释如何将DevExpress主题/皮肤应用到应用程序中&#xff0c;如何允许用户在运行时在主题之间切换&#xff0c;如何自定义现有皮肤或创建自己的皮肤&#xff0c;等等。 WinForms订阅包括许多基本控件&#xff1a;按钮、复选框、表单、消息框、对话框、对话框等。 我们实现…

python面向过程与初始面向对象编程

让我们穿越到《龙珠》世界&#xff0c;一起揭开 面向对象编程 的神秘面纱吧。 面向过程编程与面向对象编程 天下第一武道会 选手登记 第 22 届天下第一武道会即将召开&#xff0c;各路武术高手齐聚一堂&#xff0c;其中最受瞩目的&#xff0c;当属卡卡罗特&#xff08;孙悟…

Docker高级篇之Docker搭建mysql主从复制架构

文章目录 1. 安装mysql主从复制2. 主从复制测试 1. 安装mysql主从复制 首先创建主节点 docker run -d -p 3308:3306 \ --privilegedtrue \ -v /Users/jackchai/Desktop/lottory_docker/learndocker/mymysql/master/log:/var/log/mysql \ -v /Users/jackchai/Desktop/lottory_…

dots_image 增强图像中的圆点特征

dots_image 增强图像中的圆点特征 1. dot_image 有什么用途&#xff1f;2. 点状字符的特征增强3. Halcon代码 1. dot_image 有什么用途&#xff1f; Enhance circular dots in an image. 这个算子可以增强图像中的圆点特征&#xff0c;例如下面的例子。 2. 点状字符的特征增强…