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

news2024/11/24 18:16:57

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


目录

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.coloradmin.cn/o/1626284.html

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

相关文章

多数据源注解使用

<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version> </dependency> 1.使用mybatis-plus 如何配置多数据源&#xff0c;application-loc…

《QT实用小工具·三十五》基于PathView,Qt/QML做的一个可以无限滚动的日历控件

1、概述 源码放在文章末尾 改项目实现了基于PathView&#xff0c;Qt/QML做的一个可以无限滚动的日历控件&#xff0c;下面是demo演示&#xff1a; 项目部分代码如下所示&#xff1a; import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4Bu…

Qt:学习笔记一

一、工程文件介绍 1.1 main.cpp #include "widget.h" #include <QApplication> // 包含一个应用程序类的头文件 //argc&#xff1a;命令行变量的数量&#xff1b;argv&#xff1a;命令行变量的数组 int main(int argc, char *argv[]) {//a应用程序对象&…

深度学习突破:LLaMA-MoE模型的高效训练策略

在人工智能领域&#xff0c;大模型&#xff08;LLM&#xff09;的崛起带来了前所未有的进步&#xff0c;但随之而来的是巨大的计算资源需求。为了解决这一问题&#xff0c;Mixture-of-Expert&#xff08;MoE&#xff09;模型架构应运而生&#xff0c;而LLaMA-MoE正是这一架构下…

屌爆了,国产智能体的爆发性增长:一周数据揭秘

前言 自从4.19接入国内智能体 探索国产智能体&#xff1a;从GPTs使用热潮到本土模型的崛起 截止到今天(4.26)&#xff0c;仅仅一周时间&#xff0c;数据太让我意外了&#xff0c;这篇文章就来总结一下&#xff01; 这一次&#xff0c;我为国产智能体崛起&#xff0c;代言!!! 惊…

释放Stable Diffusion 无限可能

最近在整理大语言模型的系列内容&#xff0c;Stable Diffusion 是我下一篇博客的主题。关注 Stable Diffusion&#xff0c;是因为它是目前最受欢迎和影响力最大的多模态生成模型之一。Stable Diffusion 于 2022 年 8 月发布&#xff0c;主要用于根据文本的描述产生详细图像&…

《欢乐钓鱼大师》攻略,钓友入坑必备!

欢迎来到《欢乐钓鱼大师》&#xff01;在这个游戏里&#xff0c;你可以尽情享受垂钓的乐趣&#xff0c;通过不断更换和升级高阶鱼竿&#xff0c;轻松地钓到各种稀有鱼类。因为许多玩家在挑战关卡时遇到了一些困难&#xff0c;所以今天我给大家带来了《欢乐钓鱼大师攻略指南》&a…

第 3 篇 : Netty离线消息处理(可跳过)

说明 仅是个人的不成熟想法, 未深入研究验证 1. 修改 NettyServerHandler类 package com.hahashou.netty.server.config;import com.alibaba.fastjson.JSON; import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHan…

Vue3中使用无缝滚动插件vue3-seamless-scroll

官网&#xff1a;https://www.npmjs.com/package/vue-seamless-scroll 1、实现效果文字描述&#xff1a; 表格中的列数据进行横向无缝滚动&#xff0c;某一列进行筛选的时候&#xff0c;重新请求后端的数据&#xff0c;进行刷新 2、安装&#xff1a;npm i vue3-seamless-scrol…

从Kafka的可靠性设计体验软件设计之美

目录 1. Kafka可靠性概述 2. 副本剖析 2.1 什么是副本 2.2 副本失效场景 2.3 数据丢失场景 2.4 解决数据丢失方案 3. 日志同步机制 4. 可靠性分析 1. Kafka可靠性概述 Kafka 中采用了多副本的机制&#xff0c;这是大多数分布式系统中惯用的手法&#xff0c;以此来实现水平扩…

异步日志方案spdlog

异步日志方案spdlog spdlog 是一款高效的 C 日志库&#xff0c;它以其极高的性能和零成本的抽象而著称。spdlog 支持异步和同步日志记录&#xff0c;提供多种日志级别&#xff0c;并允许用户将日志输出到控制台、文件或自定义的接收器。 多线程使用和同步、异步日志没有关系是…

10.接口自动化测试学习-Pytest框架(2)

1.mark标签 如果在每一个模块&#xff0c;每一个类&#xff0c;每一个方法和用例之前都加上mark标签&#xff0c;那么在pytest运行时就可以只运行带有该mark标签的模块、类、接口。 这样可以方便我们执行自动化时&#xff0c;自主选择执行全部用例、某个模块用例、某个流程用…

indexDB 大图缓存

背景 最近在项目中遇到了一个问题&#xff1a;由于大屏背景图加载速度过慢&#xff0c;导致页面黑屏时间过长&#xff0c;影响了用户的体验。从下图可以看出加载耗时将近一分钟 IndexDB 主要的想法就是利用indexDB去做缓存&#xff0c;优化加载速度&#xff1b;在这之前&am…

自动驾驶传感器篇: GNSSIMU组合导航

自动驾驶传感器篇&#xff1a; GNSS&IMU组合导航 1.GNSS1.1 GNSS 系统概述1.2 GNSS系统基本组成1. 空间部分&#xff08;Space Segment&#xff09;&#xff1a;2. 地面控制部分&#xff08;Ground Control Segment&#xff09;&#xff1a;3. 用户设备部分&#xff08;Use…

python爬虫-----深入了解 requests 库下篇(第二十六天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

电影交流|基于SprinBoot+vue的电影交流平台小程序系统(源码+数据库+文档)

电影交流平台目录 目录 基于SprinBootvue的电影交流平台小程序系统 一、前言 二、系统设计 三、系统功能设计 1用户信息管理 2 电影信息管理 3公告信息管理 4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取…

Oracle delete删除数据是否为逻辑删除、新插入数据占用的数据块位置实验

假设一&#xff1a;数据库delete删除为直接删除 假设二&#xff1a;数据库delete删除为逻辑删除&#xff0c;在数据块标记出来&#xff0c;但是实际并没有删除。 方式一&#xff1a;通过dump数据块的方式来实现 我们先用小数据量&#xff0c;通过dump数据块的方式来实现 -- 数…

Activity界面什么都不显示怎么解决

如图&#xff0c;有可能是你重写错了方法&#xff0c;两个onCreate方法非常像&#xff0c;参数不同&#xff0c;正确方法如下&#xff1a;

003基于SSM的学生选课系统(学生信息管理系统)ssm+mysql

003基于SSM的学生选课系统/学生信息管理系统 开发环境&#xff1a; Eclipse/MyEclipse、Tomcat8、Jdk1.8 数据库&#xff1a; MySQL 前端&#xff1a;JavaScript、jQuery、bootstrap4、particles.js 后端&#xff1a;maven、SpringMVC、MyBatis、ajax、mysql读写分离、mybat…

共享购:融合社交分享与消费返利的创新电商模式

共享购电商模式是一种独特的商业模式&#xff0c;巧妙地将社交分享与消费返利结合&#xff0c;让消费者在购物的同时&#xff0c;也能通过平台资产奖励实现价值的双重增长。该平台资产体系主要由共享值和共享积分两大要素构成&#xff0c;共同构建了一个充满活力的电商生态系统…