【利用体系】历程与线程的区别及总结(非常非常紧张,口试必考题,其它文章 ...

瑞星  金牌会员 | 2024-6-22 23:41:21 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 807|帖子 807|积分 2421

一、 历程

简单来先容一下什么是历程,在我的理解中我是把每一个任务都当成一个历程,例如:我打开了电脑微信APP就是一个任务,也是一个历程。

这里的每一个任务都是历程,然后通过C++中的结构体,这里叫做PCB(历程控制块)来描述一个历程,然后通过链表将这些PCB给毗连起来,当我们查看是就是遍历该链表,将存储的信息展示出来,当打开或是删除一个历程时,只需要在链表的头或尾举行插入和删除即可,每个历程都有一个结构体PCB,然后通过数据结构组织起来就形成上面的结果。
相比大家已经对PCB(历程控制块)有了一点了解,简单来说就是来描述一个历程的结构体,当然了,在结构体中是不是还有相当多的属性来组成这个结构体的,例如:上图中的状态、CPU…等都是PCB中的一个属性,也是我们接下来要学习的重点,这里我们学习PCB中的7大属性。
分别是:
   

  • PID(历程标识符)
  • 内存指针
  • 文件描述符
  • 状态
  • 优先级
  • 记账信息
  • 上下文
  以是说一个任务是一个历程,历程也就是体系分配资源的根本单位。
接下来让我们进入真正学习历程的内容了。
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.同一个历程中的线程并不是越多越好,要可以或许合适,达到最大服从,如果线程太多了,调理开销也大概非常显着。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表