17网做网站,怎么建网站自己做赌场,北京网站建设开发,开发公司解除前期物业服务合同目录 一、 进程1.1 PID(进程标识符)1.2 内存指针1.3 文件描述符表1.4 状态1.5 优先级1.6 记账信息1.7 上下文 二、线程三、总结#xff1a;进程和线程之间的区别#xff08;非常非常非常重要#xff0c;面试必考题#xff09; 一、 进程
简单来介绍一下什么是进程#xf… 目录 一、 进程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大属性。
分别是 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.同一个进程中的线程并不是越多越好要能够合适达到最大效率如果线程太多了调度开销也可能非常明显。