Java进程调度的基本过程(详细易理解)

news2024/10/7 18:28:59

目录

一.什么是进程?

二.进程是如何创建的

三.进程如何调度的

优先级:

状态:

记账信息:

上下文:

线程是什么:

为什么要有线程:

坏处:


一.什么是进程?

了解这个问题之前,我们需要先打开我们桌面上的的学习资料

 啪的一下,很快啊,点双击学习资料.exe之后,在后台(ctrl+alt+delete,任务管理器)我们就能看到这个东西

 我们这里肉眼直观可见的这个XX游戏登录程序,就是我们所谓的进程

桌面上的exe文件,只是起了一个发起调用的作用

如果我们不点击exe文件,那么这个进程就永远不会被触发

换句话来说

不调用,不触发

很好的一句废话

二.进程是如何创建的

好吧好吧

既然我们已经能通过后台(任务管理器)看到这个进程

那么我们也需要简单了解一下我们是如何创建出来一个进程的

拿Linux为例

(Windows不开源不清楚他的实现)

在你点击了你的学习资料之后

linux的系统里面有个名字叫做

PCB(进程控制块)的双向链表(仅限linux)

遇到任务就插入链表中

任务结束就销毁这个节点

查看该任务就是遍历链表

三.进程如何调度的

让我们先来一个小故事

假如你开了一把游戏,然后被分配到了一个名叫

打野的高危职业

 刚开局不就,三路传来噩耗,都在ping信号请求打野爸爸支援

而在这三组信号中,上路狗头老哥最为凄惨,三分钟就只能在二塔溜达了

所以在这三组信号中

优先选择了去gank上路

而对于中路和下路,则说

"你们先等等"

"我帮完了狗头老哥,我再来帮你们"

由这个小故事,引出了我们两个重要的概念

1.优先级   2.状态

优先级:

系统优先给谁分配时间,系统分配多少时间

状态:

这个状态描述了当前这个进程接下来应当怎么调度

就绪状态: 随时可以让CPU执行

阻塞状态(睡眠状态):  暂时不让CPU执行

让我们接着上面的小故事继续

 游戏转眼之间就到了15分钟,这个时候突然屏幕右边出现了发起投降

而中下的队友也开始对你指指点点

你感觉到非常悲伤,自己明明已经这么尽力了

都帮助狗头在15分钟拆掉了对面上路水晶

为什么队友还会选择投降

结果查询gank记录

原来是自己在这15分钟,帮助了狗头114514次

就没gank过中下

导致中下通关,自家水晶前的两个门牙都被拆掉了

你也输掉了这局游戏

由这个小故事,引出了我们另一个重要的概念

 这里的查询gank记录

也就是记账信息

记账信息:

统计了每个进程,都分别被执行了多久,分别都执行了哪些指令。分别都排队等了多久,目的是给进程调度提供指导依据的。

让我们接着讲上面的故事

 于是打完这局游戏之后

有两个人同时加了你的好友

第一位是:上单狗头萌妹

第二位是:中单祖安沙皇

你同意了他们的好友之后,了解到

原来因为你上局游戏一直帮助和鼓励这位玩狗头的上单玩家

是个年龄18岁的大波富婆!!

这位妹妹特地邀请你今晚去她家里面玩

游戏

然后给了你,她的家庭地址

而第二位来自祖安大区的沙皇玩家

对你表示了"亲切地"问候之后

也给你留下了一个地址,表示今晚皇城PK

结果非常巧

你恰好把地址弄错了

于是你拿着七匹狼冲进妹妹的家中一顿狂揍

然后带着玫瑰花去了皇城PK

.....

博主的一个朋友经历的这个故事的结尾

就是没有记录好每个事件对应的处理,导致出现了重大失误

由此引出了我们最后一个概念

上下文

上下文:

记录了上次进程被调度出CPU的时候,当时程序的执行状态(存档)

下次进程上CPU的时候,要可以恢复之前的状态,然后继续执行下去(读档)。

(存档位置↓)

进程被调度出CPU之前,要先把cpu中的所有寄存器中的数据都给保存到内存中

下次进程再被调度上CPU的时候,就可以从刚才的内存中恢复这些数据到寄存器中


----------------分割线------------------

以上就是进程调度的基本了,下面是额外的一些关于线程的补充

线程是什么:

轻量级进程

一个进程中可以包含多个线程,但最少得有一个线程

也就是说

进程中的线程数量>=1

为什么要有线程:

进程的创建和开销比较大,所以我们一般在一个进程里面创建多个线程来完成任务,就不必单独开创另一个进程浪费资源了

线程不管是创建,销毁,还是调度使用,他的消耗都远远低于线程

坏处:

相对于进程的独立性,如果某个进程中的一个线程发生错误,崩溃的话

有可能会把该线程所处的进程也搞崩溃

导致该进程的其他线程也崩溃

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

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

相关文章

spring security oauth2 整合 JWT

前言 在这个基础上&#xff0c;进行整合。 spring security oauth2学习 -- 快速入门_本郡主是喵的博客-CSDN博客 1.jwt的一般使用 先把 reids,common-pools 等依赖删掉。 删掉redis的下相关配置 1.1 导入依赖 <!--jjwt--><dependency><groupId>io.json…

正则表达式(2)

文章目录 正则表达式一.正则表达式1.含义2.通配符2.1通配符含义作用2.2常见的通配符 3.元字符&#xff08;字符匹配&#xff09;4.表示次数5.位置锚定6.分组或其他 二.扩展正则表达式1.表示次数2.举例 正则表达式 一.正则表达式 1.含义 &#xff08;1&#xff09;是一种特殊…

基于Java智慧城市实验室主页系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

一、枚举类型——常量特定方法

Java 的枚举机制可以通过为每个枚举实例编写不同的方法&#xff0c;来赋予它们不同的行为。要实现这一点&#xff0c;你可以在枚举类型中定义一个或多个抽象方法&#xff0c;然后为每个枚举实例编写不同的实现&#xff0c;例如&#xff1a; ConstantSpecificMethod.java import…

使用 TensorFlow.js 将机器学习引入您的 Web 应用程序

如何使用 TensorFlow.js 在您的 Web 应用程序中实施机器学习 原文作者: Abhay Singh Rathore 机器学习 (ML) 不再是一个崇高、遥不可及的概念。借助 TensorFlow.js 等库&#xff0c;开发人员现在可以将 ML 整合到他们的 Web 应用程序中。例如&#xff0c;您可以创建一个系统&am…

革新智造业丨云和恩墨数据智能产品 zAIoT 将工控设备KPI分析性能提升百倍

点击关注 随着智能制造业的迅猛发展&#xff0c;工控设备在生产过程中起到至关重要的作用。为了确保生产效率和产品质量的提高&#xff0c;企业需要对工控设备进行全面的分析和评估。 工控设备KPI是指在生产线/车间设备的运行和维护过程中&#xff0c;需要监控的关键指标参数&a…

Vue----Vue的模板语法

【原文链接】Vue----Vue的模板语法 Vue 模板语法的描述 Vue使用一种基于HTML的模板语法&#xff0c;使我们能够声明式地将其组件实例的数据绑定到呈现的DOM上&#xff0c;所有的Vue模板都是语法层面合法的HTML&#xff0c;可以被符合规范的浏览器和HTML解析器解析 文本插值 …

Java性能权威指南-总结16

Java性能权威指南-总结16 线程与同步的性能线程池与ThreadPoolExecutor设置最大线程数设置最小线程数 线程与同步的性能 能够轻松编写多线程程序也是Java的一个标志性特征。Java性能方面的吸引力显而易见&#xff1a;如果有两个CPU可用&#xff0c;那么一个应用能够完成的工作…

计算机网络笔记(更新中)

本文是个人笔记&#xff0c;都是概念&#xff0c;没基础不建议看。 绪论 计算机网络的定义 最简单的定义&#xff1a;计算机网络是一些互相连接的、自治的计算机的集合因特网&#xff08;Internet&#xff09;是“网络的网络” 计算机网络的组成&#xff08;物理组成&#x…

STM32单片机(七)ADC模拟数字转换器----第一节:ADC模数转换器

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

autoDL上A100运行wiki出错:NVIDIA A100-PCIE-40GB(最后安装好torch+dgl了);学校服务器加2.X版本pytorch

1、A100运行wiki出错&#xff1a;NVIDIA A100-PCIE-40GB with CUDA capability sm_80 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70. If you want to use the NVIDIA A100-PCIE…

CTFshow-pwn入门-pwn26-pwn28

什么是ASLR 大多数的攻击都基于这样一个前提&#xff0c;即攻击者知道程序的内存布局&#xff0c;需要提前知道shellcode或者其他一些数据的位置。因此&#xff0c;引入内存布局的随机化能够有效增加漏洞利用的难度&#xff0c;其中一种技术就是ASLR&#xff08;Address Space…

Qt颜色、文件、字体对话框

项目目录 界面 一、颜色对话框 QColor color QColorDialog::getColor(QColor(255,0,0));qDebug()<<"r"<<color.red()<<" g "<<color.green()<<" b "<<color.blue(); 二、文件对话框 //文件对话框QString…

《网络安全0-100》-网络攻击方式

网络攻击方式 DoS DDoS攻击 DoS攻击和DDoS攻击都是网络攻击的一种&#xff0c;它们的区别如下&#xff1a; DoS攻击(Denial of Service&#xff0c;拒绝服务攻击)&#xff1a;指攻击者通过向目标计算机或网络发送大量的合法请求&#xff0c;占用其网络资源和带宽&#xff0c;…

Java API

目录 1.JSON 2.多线程 3.网络编程 1.JSON &#xff08;1&#xff09;定义&#xff1a; 1.轻量级的文本数据交换格式 2.具有自我描述性【看到某个JSON数据就能知道它的特点】 3.比XML传输速度快【跨平台】 (2)语法规则&#xff1a; 1.语法&#xff1a; 2.构成要素&#xff…

Cortext-M3系列:M3内核概述(1)

引言&#xff1a; 本系列博客记录的是博主以前学习单片机时期的一些关于MCU内核方面的知识点和笔记&#xff0c;分享给一起学习的小伙伴&#xff0c;也作为复习用处。文中出现的Cortex-M3、CM3、M3均指的是ARM公司的产品Cortex-M3&#xff0c;后面不再赘述。本系列的博客仅仅只…

基于Java共享客栈管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

Go语言包设计指南

1. Go包的认知 1.1 Go包是基本功能单元 我们知道Go包是Go编程语言中的一个重要概念&#xff0c;它是一组相关的Go源代码文件。并且&#xff0c;在Go中&#xff0c;每个Go源文件都必须属于一个包。 Go包是一个逻辑上独立的单元&#xff0c;是Go的基本功能单元&#xff0c;用来做…

Redis安装说明(heima)

Redis安装说明&#xff08;heima&#xff09; 笔者的redis(Linux版)的下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87926624 笔者的redis图形化桌面客户端&#xff0c;下载链接地址为&#xff1a;https://download.csdn.net/download/weixin…

Python单元测试框架之pytest -- 断言

对于测试来讲&#xff0c;不管是功能测试&#xff0c;自动化测试&#xff0c;还是单元测试。一般都会预设一个正确的预期结果&#xff0c;而在测试执行的过程中会得到一个实际的结果。测试的成功与否就是拿实际的结果与预期的结果进行比较。这个比的过程实际就是断言&#xff0…