javaEE--多线程学习-进程调度

进程调度不明白?看这一篇文章就够了,逻辑衔接严密,文末附有关键面试题,一个海后的小故事让你瞬间明白这里面的弯弯绕绕!


目录

1.什么是进程?

2.进程控制块(PCB)

 2.1 一个PCB就是一个进程吗?

2.2 操作系统如何管理内存?

 2.3 PCB有哪些属性? 

3.CPU分配--进程调度(海后小故事)

4.多核CPU 

 5. 什么是线程?

6. 为啥要有线程?

7.进程和线程的区别(关键面试题) 


1.什么是进程?

每个应⽤程序运行于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了⼀个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之⼀。
进程是操作系统对⼀个正在运行的程序的⼀种抽象,换言之,可以把进程看做程序的⼀次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

 相信大家都用过任务管理器,如下图,这些运行起来的可执行文件称为“进程”。

操作系统是如何是管理进程的呢? 这里就不得不引入一些概念了

2.进程控制块(PCB)

PCB 是进程控制块(Process Control Block)的缩写。它是操作系统中用来管理和维护进程信息的数据结构,每个进程在系统中都有对应的 PCB。PCB 包含了进程的各种状态信息、上下文(Context)信息以及控制信息,主要用于操作系统进行进程管理和调度

 2.1 一个PCB就是一个进程吗?

一个PCB就是一个进程这不完全准确。我们首先要明白,PCB是什么?它是一个数据结构啊,而我们的进程可以看成程序的一次运行,一个 PCB(进程控制块)是操作系统中用来描述和管理一个进程的数据结构,它存储了一个进程的各种状态信息、上下文信息和控制信息。但 PCB 本身并不是一个进程,而是为一个进程服务的数据结构。一个进程在操作系统中由多个部分组成,包括代码、数据、堆栈等,而 PCB 则是用来管理这些部分的数据结构。换句话说,一个进程包含了代码执行的逻辑和数据,而 PCB 则是用来记录和管理这个进程的状态、资源和其他相关信息。可以将 PCB 比喻为一个进程的档案,里面包含了进程的各种资料和信息,而进程则是实际运行的程序实体在操作系统中,每个进程都有对应的 PCB,操作系统通过管理 PCB 来对进程进行调度、管理和控制。

 讲到这,我们稍微注意下上面所讲的内容

首先,进程可以理解成程序的一次运行(诸如:.exe后缀的文件,都是可执行程序)

其次,PCB是一种数据结构,用来描述和管理进程,可比喻为一个进程的档案

2.2 操作系统如何管理内存?

一个PCB对象,代表着一个实实在在运行着的程序,也就是进程,注意这里的字眼是“代表”。操作系统通过数据结构,例如线性表、搜索树等将PCB对象组织起来,方便管理时进行增删查改,比如用链表,把他们当糖葫芦一样,一个一个串起来,这里所运用的数据结构因操作系统而异。

这里给大家简单讲一下进程的一些操作:

“创建进程”,先创建出PCB(PCB中有pid(下文会讲到)用于识别进程),然后把PCB放入链表

“销毁进程”,也就是遍历链表,找到链表中的PCB并删除。

而本文开头查看任务管理器,其实就是对链表进行遍历,找出所有PCB

 2.3 PCB有哪些属性? 

  • pid: 一个进程身份的标识,就像我们的身份证号对应着一个人,pid也是如此,对应一个进程
  • 内存指针:用于指明该进程所要执行的代码/指令在内存中的哪个位置,所需要的数据在哪里。当运行一个.exe文件时,此时操作系统就会把这个.exe文件加载到内存中,变成进程。
  • 文件描述符表:文件描述符表是一个数据结构,可以视为一个数组,里面的每一个元素由是一个结构体,对应了一个文件的相关信息。当我们执行程序的时候,经常会和文件打交道,进程每访问一个文件,就会在上面增添一个元素用于记录这个文件的相关信息,这个文件描述符的下标,就称为”文件描述符“。

      上面是PCB的基础属性,下面这些则是用于进程调度

  • 状态:指的是进程当前的状态。如:1.就绪状态:表示进程已经准备好被操作系统调度执行;2.阻塞/休眠状态:进程因为某种原因而暂时无法继续执行;3.运行状态:进程正在执行指令,占用 CPU 资源。 还有其他的一些状态这里就不赘述了。
  • 优先级:用来指示操作系统在进行进程调度时,应该优先执行哪些进程。
  • 记账信息:统计了进程被执行了多久,都执行了哪些指令。都排队等了多久,目的是给进程调度提供指导依据的。
  • 上下文:包含了进程在执行过程中需要保存和恢复的所有状态信息,以便在进程切换或者中断处理时能够正确地恢复执行。就像我们看电视剧的时候,有时候会因种种原因没看完,当隔天我们点开电视剧的时候,影视软件会给我们恢复到历史观看时间,让我们继续看下去。

3.CPU分配--进程调度(海后小故事)

小芳是个大美女,肤白貌美,大长腿,她希望她的男朋友是个高富帅,还要巨能舔,但是这样的优质男是真的不好找!为了满足自己的要求,于是她就交了三个男朋友:

  1. 有钱的公子哥
  2. 一米八的大帅比
  3. 温柔的舔狗

这个时候我们的海后小芳就要给他们进行时间安排,作为一个时间管理大师,怎么会让他们三个碰面呢?那不就火星撞地球了!

于是她规定了星期一、二跟公子哥出去玩,星期三、四跟大帅比出去约会,星期五、六跟舔狗出去逛街,星期天休息一天。

在宏观上看,她同时交了三个男朋友,但是在微观上,在不同时刻,她只能和一个男朋友在一起约会。

“同时”交三个男朋友这就是并发,而规划时间的过程也就是所谓的“进程调度”。

 我们回过头看PCB的属性

  • 状态:正常情况下,小芳约男朋友们出去玩,都是随叫随到的情况,此时男朋友们都是“就绪状态”,但是有一天公子哥犯错了,给他的老爸关禁闭了,这个时候公子哥就处于“阻塞/休眠状态”,此时小芳就不会约他出来,也就是说进程不会被CPU调度。
  • 优先级:  这段时间小芳看上了一个lv的包包,这个时候她三个男朋友中她肯定会优先找公子哥出来,然后再考虑帅比和舔狗。
  • 记账信息:由于上个星期公子哥给她买了包包,于是陪了公子哥五天,陪了帅比男朋友一天,还有一天实在撑不住了,需要休息,这个时候小芳翻账本发现忽略了舔狗一个星期,舔狗给她发的信息已经99+了,为了挽留住舔狗,让他能够继续卖力舔下去,小芳连忙在这个星期抽出了两天陪舔狗
  • 上下文:约会时,有些事情没完成,下次继续,这时候就需要把约会结果保存好,(存档)以备下次继续,比如跟公子哥说好了下次去海滩,小芳到时候带泳衣去,结果记错了,拿着泳衣去跟帅比去酒吧蹦迪······为了避免这种尴尬情况,就需要(存档)

 

4.多核CPU 

随着技术的进步,我们的CPU从单核到了现在的多核,基本上都看不到单核CPU的出现了,每个核心各干各活,互相之间不影响,此时就需要进程调度来负责,用“分时复用”来完成调度!

一个核心,同一时刻,只能运行一个进程

十六个核心,同一时刻,同时运行十六个进程(完全是同时执行) ---- 并行执行

 但是,一个核心,不同时刻,可执行不同的进程!这一时刻执行进程1,下一刻,执行进程2·····

 CPU就把总的执行时间,切换成若干个小的片段,每个片段可执行一个进程,每个片段称为“时间片”,由于时间片较短(CPU切换进程太快,人感觉不到),站在人的角度来看,就是若干个进程在“同时执行”(本质上不是同时)    ----  并发执行

 操作系统就会按照 并行+并发 相互搭配,运行所有进程!!

并行,微观时间上是同时执行(多核心各自运行各自的进程)

并发,宏观时间上是同时执行,微观时间上是串行执行 (一个核心执行多个进程)

这里的串行执行在操作系统内核内部管理好了,编写应用程序时无法干预,普通用户也无法感知到,因此往往把 并行+并发 统称为 “并发” ,把解决并发问题的程序,称为“并发编程

 在弄懂了进程之后,我们接下来谈谈线程。

 

 5. 什么是线程?

 一个线程就是一个“执行流”,每个线程之间都可以按照顺序执行自己的代码,多个线程之间“同时”执行着多份代码。简单点说,线程可以理解成“进程的一部分”,一个进程中可以包含一个或者多个线程。

当一个进程中只有一个线程时候,一个PCB就代表了一个进程,但是在多个线程的进程中,一个PCB代表了一个线程,多个PCB联合起来描述了一个进程

 

6. 为啥要有线程?

  • 首先,“并发编程”成为了“刚需”,单核CPU已经遇到瓶颈了,要想提高算力,就需要多核CPU,而并发编程能更充分利用多核CPU资源。
  • 其次,虽然多进程也能实现并发编程,但是线程比进程更轻量! 

      轻量体现在如下三点:

  1. 创建线程比创建进程更快
  2. 销毁线程比销毁进程更快
  3. 调度线程比调度进程更快

    那么为什么线程比进程更轻量?  

核心在于,创建进程,这个进程可能包含多个线程,这过程,涉及到了  资源分配/释放 (很费劲),而创建线程,相当于资源已经有了,省去了 资源分配/释放 步骤,同一个进程包含N个线程,这些线程之间共用资源,只有你创建第一个线程时,(也是创建第一个进程时),会去进行资源申请操作,后续再创建线程,就没有资源申请的过程了

 

7.进程和线程的区别(关键面试题) 

  1.  进程包含线程,每个进程至少有一个线程存在,即主线程。
  2.  进程和线程之间不共享内存空间,同一个进程的线程之间共享一个内存空间
  3.  进程是系统分配资源的最小单位(操作系统创建进程,需要给进程分配内存空间)         线程是系统调度的最小单位(操作系统创建线程,是在CPU上进行调度的)
  4.  一个进程挂了一般不会影响到其他进程,但是一个线程挂了,可能把同进程内的线程一起带走,使整个程序崩溃

 感谢阅读,希望对您有所帮助!!

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

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

相关文章

已解决java.lang.IllegalThreadStateException: 非法线程状态异常的正确解决方法,亲测有效!!!

已解决java.lang.IllegalThreadStateException: 非法线程状态异常的正确解决方法,亲测有效!!! 目录 问题分析 场景描述 报错原因 解决思路 解决方法 检查线程状态 正确管理线程生命周期 异常处理 总结 博主v&#xff1a…

JavaEE >> Spring Boot(1)

Spring Boot 前面已经介绍了 Spring ,是为了简化 Java 程序开发的,而在前面创建的过程中就会发现其实 Spring 还是有点复杂,此时 Spring Boot 就诞生了, Spring Boot 是为了简化 Spring 程序开发的。 Spring Boot 即 Spring 脚手…

history日志发送到远程日志服务器

主要目标是设置history信息包含谁、源IP、在哪个目录下、做了什么工作,并实时将日志发送到日志审计服务。 (一)基础知识 1.logger 是一个shell接口,可以通过该接口使用rsyslog的日志模块 2./etc/profile.d/history.sh比配置/etc…

Android某钉数据库的解密分析

声明 1 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 目的 1 解密app数据库,用数据库软件打开查看信息内容 入手…

【后端】python与django的开发环境搭建指南

安装Git 双击Git 客户端安装文件,在安装页面,单击“Next” 在安装路径选择页面,保持默认,单击“Next” 在功能组件选择页面,保持默认,单击“Next” 在开始菜单文件夹设置页面,保持默认&am…

浅谈rDNS在IP情报建设中的应用

在当今数字化世界中,互联网已经成为人们日常生活和商业活动中不可或缺的一部分。在这个庞大而复杂的网络生态系统中,IP地址是连接和识别各种网络设备和服务的基础。然而,仅仅知道一个设备的IP地址并不足以充分理解其在网络中的角色和行为。为…

win11 桌面图标突然多 绿色小对勾,如何去除掉

突然间桌面图标每个上面都有一个绿色小狗狗,如下图所示,以为中病毒了,后来一查不是。 去除方法 1、鼠标在桌面空白处单击,选择“个性化”(或直接按“windows键I键”)调出设置菜单。 2、在左侧选择“主题”…

C++:const成员和取地址操作符

目录 一、const成员 二、取地址及const取地址操作符重载 一、const成员 将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。 注&…

21.基础乐理-等音调扩展篇、为何一共十五个大调

首先 等音调 的概念是基于 等音 的概念,比如下图中的音名:因为用的按键相同,音名不同,所以被称为等音调 然后音名一共有35个,如下图:所以在理论上它会有35个大调,但是人总是倾向于选择简单、简洁…

MAC如何重装系统(怒冲30大洋,才拿到的教程~,收藏点赞兄弟们)

背景 应该是之前装了一些远程的软件,卸载一直不干净,导致电脑很卡,而且网络貌似出现了问题,钉钉直接登陆不上了。其余软件网络倒是还好。所以就去PDD,买了个教程,重装了一下。才发现是mac自带,…

云赛道---AI开发框架

MindSpore 旨在提供端边云全场景的 AI 框架。 MindSpore 可部署于端、边、云不同的 硬件环境,满足不同环境的差异化需求,如支持端侧的轻量化部署,支持云侧丰富的 训练功能如自动微分、混合精度、模型易用编程等。 MindSpore 全场景的几个重…

交互式探索微生物群落与生态功能的关系

微生物群落在生态系统中发挥则重要功能,我们在对微生物群落进行分析时,会将不同分类水平(从门到属)的微生物类群的相对丰度与测定的某一生态功能进行相关性分析。但由于微生物类群数较多,又有不同的分类水平&#xff0…

leetcode-二叉树的镜像-91

题目要求 思路1 1.遍历一遍二叉树,将左边的结点对应创建一个右边的结点 2.用此方法空间复杂度O(n),并不是最优 思路2 1.将一个结点的左右子树进行交换,如果左子树还有左右结点,就再交换左子树的左右结点,以此递归下去…

Kubernetes:云原生时代的核心引擎

文章目录 一、Kubernetes简介:引领云原生潮流二、K8s的核心特性:自动化与智能化三、K8s的实践应用:打造高效云原生应用架构四、K8s的挑战与应对:安全与性能并重五、K8s的未来展望:无限可能与挑战并存《Kubernetes快速进…

【windows-搭建Ubuntu22LTS】

一、环境要求 1. windows版本要求 至少Windows 10 2020年5月(2004) 版, Windows 10 2019年5月(1903) 版,或者 Windows 10 2019年11月(1909) 版 2. 控制面板开启相关的程序(需要重启) 二、Microsoft store安装unbuntu 下载后直接运行(稍微等会&#…

从开发角度理解漏洞成因(01)

文章目录 PHP开发漏洞环境(SQL注入)生成前端代码生成后端代码数据库写功能调试功能 测试SQL注入漏洞字符型注入布尔盲注 PHP开发漏洞环境(SQL注入) 持续更新中… 文章中代码资源已上传资源,如需要打包好的请点击PHPM…

亿道三防onerugged|工业车载电脑在港口正面吊上的应用

港口正面吊是港口作业中至关重要的设备,它承担着装卸集装箱等重要任务。作为专业人员,我深知港口作业的复杂性和挑战性。在这方面,亿道三防onerugged系列的工业车载电脑为港口正面吊的应用提供了一种创新的解决方案。 首先,工业车…

milvus对象存储和消息中间件的工厂设计模式分析

milvus对象存储和消息中间件的工厂设计模式分析 需求 根据参数设置创建mq和storage mq有kafka,pulsar storage有local,minio,remote 配置文件 根据配置文件选择初始化mq和存储: mq:type: pulsarcommon:storageType: minio对于这种类型一个是mq,一个是存储&…

springboot+vue新疆肉牛智慧牧场养殖系统

系统涉及的对象是奶牛。 系统使用员工有管理员和普通员工。 管理员有修改的权限,普通员工没有。 系统需要包含奶牛的编号,种类,体重,健康情况、生长情况、牛奶产量,以及上次更新数据时间等信息,管理员可以对…

关于权限的设计

首先系统权限,每个账号登录后,都需要知道这个账号允许访问哪些api,哪些数据权限(一般是指其他账号的一些数据) 这里就需要通过角色来关联。 --1.角色绑定菜单,每个菜单设计的时候包含了这个菜单会用到的所…