【JavaEE】进程是什么?

文章目录

  • ✍进程的概念
  • ✍进程存在的意义
  • ✍进程在计算机中的存在形式
  • ✍进程调度

✍进程的概念

每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之⼀。

进程是操作系统对⼀个正在运行的程序的⼀种抽象,换言之,可以把进程看做程序的⼀次运行过程;
同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

举例子来说,打开的csdn网站就是一个进程
打开任务管理器,可以看到计算机中的进程。
包括后台进程(计算机自动打开的,不需要你手动打开)
在这里插入图片描述
想要运行一个程序,就需要为程序分配资源。
所以说在操作系统内部,进程又是操作系统进行资源分配的基本单位。

在这里插入图片描述

✍进程存在的意义

进程主要是用来解决程序不能并发执行从而导致 CPU 利用率低下这个问题。

随着科技的发展,人们对计算机的需求也越来越大,同时对计算机性能的要求也越来越高。但事务的发展总是有所限制的。对于计算的CPU来说,现在的科技水平只能达到4nm的精度,这对于庞大的需求来说,确实是有些吃力,所以人们开始思考,当CPU的制造水平有了一定限制时,一个CPU解决不了的事情,我们可以交付给多个CPU来处理,也就是我们现在所谓的多核计算机。

使用多个核心来处理问题,当然要对这些核心进行管理规划,使这些核心可以并发执行程序。

这里的并发涵括:并发和并行
在后续会讲解到的。

✍进程在计算机中的存在形式

在操作系统中,通常用PCB(程序控制块 Program Control Block)这样的结构体来描述进程。
不同的操作系统的称呼不相同。

PCB中存储的很多的信息

在操作系统中,通常使用‘链表’这样的数据结构来使PCB串接起来。
有很多这样的链表存在于操作系统中。

  1. 任务管理器查看进程列表
    遍历链表的每个结点,并获取每个结点的信息。
  2. 创建新的进程(双击执行程序)
    进程创建出新的PCB结构体,形成新的结点并插入到链表中
  3. 删除进程(关闭程序)
    在链表中删除对应的PCB结点

PCB结构体中包含的内容

  1. pid – 进程唯一标识
    跟身份证一样,可以唯一的确定进程。
    同一个机器,同一时刻,进程id一定是不同的

如下,我打开了五个Typora程序,也就执行了五个Typorad的进程,可以看到他们五个的PID是各不相同的。
在这里插入图片描述

  1. 内存指针
    进程运行时,需要消耗一定的硬件资源,其中内存就是一个非常关键的资源!

一个程序在运行的时候,就会被从硬盘(xxx.exe)加载到内存中
加载这个程序的指令/依赖的数据

注意:这里的内存指针是一组指针
这一组指针告诉操作系统,要运行的指令都在内存的什么位置
也告诉系统,进程需要依赖的数据又存于什么位置
…等等
总之,内存指针是给操作系统知名下一步需要做什么

在这里插入图片描述

  1. 文件描述符表
    一个进程运行的时候,会操作一些文件。
    就通过一个类似于“顺序表”这样的数据结构,来记录这个进程打开了哪些文件

  2. 进程调度
    打开任务管理器可以看到,有100+的进程在执行
    而执行就需要消耗资源,而我们的计算机并没有那么多的核心(CPU)以供得每个进程分配到一个CPU,这时就需要并行+并发来解决资源的分配问题

在这里插入图片描述
一个核心,同一时刻,只能执行一个进程
(以我的计算机为例,我的计算机中拥有16个核心)
也就是说,同一时刻我的计算机最多可以同时执行16的进程
这叫做并行执行这是完全的同时执行

一个核心,不同时刻,可以执行不同进程
CPU把总的时间切割成小的片段,每个片段执行一个进程,每个片段成为“时间片”
由于时间片比较短,CPU切换进程的速度非常快,人感知不到
所以站在使用者的角度来看,这些进程就是“同时执行”的,本质上并不是同时的
这叫做并发执行

操作系统会按照并行和并发互相搭配,来执行一个进程。

总结:
并行,微观时间上,也是同时执行
并发,宏观时间上,是“同时执行”,微观时间上,是串联执行。但由于速度之快,人感知不到。

因此就将,并行和并发统称为“并发”

✍进程调度

PCB提供了几个属性,来支持进程调度

  1. 状态
    分为“就绪状态”和“阻塞状态”
    区别在于CPU调用时,是否可以立即执行

  2. 优先级
    我们知道调用进程时,需要为其分配资源
    但在分配资源时,并非是均等的分配
    例如在打游戏时,此时你打开的网页就不需要分得那么多的资源

  3. 上下文
    在上文中,我们提到“并发执行”,在执行过程中,会产生很多的“中间结果”,在进程切出于CPU之前,需要把这些“中间结果”(CPU的寄存器中的各种值),保存到PCB的上下文中。
    这个过程是将寄存器的数据存放到内存中,也就是我们平时所见的【存档】

当下一次CPU再次调度这个进程时,就要把之前的数据读取出来,放入寄存器中,也就是所谓的【读档】。
具体操作过程:有一个PC程序计数器,他会记录上一次执行到哪一个位置,在下一次执行时,就从这个位置继续执行。

  1. 记账信息
    基于优先级,我们可以知道每个进程分配的资源并不相同
    引入记账信息,我们可以记录每个进程所分配的资源
    进而后续对资源的分配做出调整。

以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!💞💞💞

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

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

相关文章

C语言 | qsort()函数使用

目录: 1.qsort介绍 2.使⽤qsort函数 排序 整型数据 3.使⽤qsort函数 排序 结构体数据 4. qsort函数的模拟实现冒泡排序 qsort()函数 是一个 C语言编译器函数库自带的排序函数, 它可以对指定数组(包括字符串,二维数组&#x…

聚观早报 | 滴滴2023年Q4营收;微软推广Copilot

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 3月25日消息 滴滴2023年Q4营收 微软推广Copilot 极狐汽车将出口西班牙 华为公开智能驾驶新专利 华为P70系列发布…

【分布式】——分布式事务

分布式事务 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/tree-learning-notes ⭐⭐⭐⭐⭐⭐ Spring专栏👉https://blog.csdn.net/weixin_53580595/category_12279588.html SpringMVC专…

Java day16 filter

filter 1、入门2、生命周期3、执行顺序问题4、注解 1、入门 UserServlet.java package com.cky.servlet;import jakarta.servlet.ServletConfig; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebIni…

Java后端项目性能优化实战-群发通知

背景 公司群发通知模块性能存在问题,我进行全面的系统调优,系统处理能力大幅提升。 原发送流程 优化后的发送流程 优化的点 说明:以下问题基本都是压测过程遇到的,有些问题普通的功能测试暴露不了。优化目标:保证高…

weindos的docker 运行Hyperf 日志

weindos的docker 运行日志 进入cmd窗口 docker run --name hyperf -v D:\phpstudy_pro\WWW\hyperf.com\hyperf-skeleton:/data/project -p 9501:9501 -it --privileged -u root --entrypoint /bin/sh hyperf-skeleton:latest D:\phpstudy_pro\WWW\hyperf.com\hyperf-skeleton是…

网络: 套接字

套接字: 在网络上进行进程间通信 网络字节序与主机字节序的转化 sockaddr sockaddr struct sockaddr {sa_family_t sa_family; // 地址族char sa_data[14]; // 地址数据,具体内容与地址族相关 };sockaddr_in :主要是地址类型, 端口号, IP地址. 基于IPv4编程…

6.使用个人用户登录域控的成员服务器,如何防止个人用户账号的用户策略生效?

(1)需求: (2)实战配置步骤 第一步:创建新的策略-并编辑策略 第二步:将策略应用到服务器处在OU 第三步:测试 (1)需求: 比如域控,或者加入域的…

【iOS ARKit】3D文字

首先,3D场景中渲染的任何虚拟元素都必须具有网格(顶点及顶点间的拓扑关系),没有网格的元素无法利用GPU 进行渲染,因此,在3D 场景申渲染 3D文字时,文字也必须具有网格。在计算机系统中&#xff0…

Ruoyi若依框架下载流程详细解读(SpringBoot-Vue)

图解: 前端设计: 前端设计一个link文字连接或者按钮(ElementUI)Element - The worlds most popular Vue UI framework 前端请求设计: import request from /utils/request //下载示例模型定义语言的JSON export const…

零售商品计划新篇章:智能管理系统的挑战与机遇

在零售企业管理中,商品计划管理在零售企业运营中占据核心地位。面对日益激烈的市场竞争和消费者需求的多样化,零售企业在商品计划管理方面面临着诸多挑战和需求。以下针对这些挑战和需求的分析,以及对一套智能商品计划管理系统应具备的功能和…

每日一练:LeeCode-200、岛屿数量【DFS递归+BFS队列】

给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边…

【微服务】Eureka(服务注册,服务发现)

文章目录 1.基本介绍1.学前说明2.当前架构分析1.示意图2.问题分析 3.引出Eureka1.项目架构分析2.上图解读 2.创建单机版的Eureka1.创建 e-commerce-eureka-server-9001 子模块2.检查父子pom.xml1.子 pom.xml2.父 pom.xml 3.pom.xml 引入依赖4.application.yml 配置eureka服务5.…

【数据结构刷题专题】—— 二叉树

二叉树 二叉树刷题框架 二叉树的定义: struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(NULL), right(NULL); };1 二叉树的遍历方式 【1】前序遍历 class Solution { public:void traversal(TreeNode* node, vector&…

CI/CD 搭建jenkins基础测试环境构建项目(一)

Jenkins是一个开源的持续集成工具,可以帮助开发团队自动化构建、测试和部署他们的软件项目。通过Jenkins,开发团队可以实现快速、高效地交付软件,并及时发现和解决问题,从而提高团队的生产力和软件质量。持续集成/持续交付&#x…

后端常问面经之操作系统

请简要描述线程与进程的关系,区别及优缺点? 本质区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位 在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之…

详解多模态 AI

2022 年 11 月,OpenAI 推出了 ChatGPT。它只用了几天时间就以其前所未有的能力席卷了世界。生成式人工智能革命已经开始,每个人都在问同一个问题:下一步是什么? 当时,ChatGPT 和许多其他由大型语言模型 (L…

Acer宏碁暗影骑士擎AN515-58笔记本电脑工厂模式原厂Win11系统ISO镜像安装包下载

宏基AN515-58原装出厂OEM预装Windows11系统工厂包,恢复出厂时开箱状态一模一样,带恢复还原功能 链接:https://pan.baidu.com/s/1iCVSYtList-hPqbyTyaRqQ?pwdt2gw 提取码:t2gw 宏基原装系统自带所有驱动、NITROSENSE风扇键盘灯…

4.2 循环语句loop,等差数列求和

汇编语言 1. 循环语句loop loop指令的格式是:loop 标号,CPU执行loop指令的时候,要进行两部操作 cx cx - 1;判断cx中的值,不为0则转至标号处执行程序,如果为0则向下执行 循环使用loop来实现,循环次数存…

Typora结合PicGo + Github搭建个人图床

目录 一 、GitHub仓库设置 1、新建仓库 2、创建Token 并复制保存 二、PicGo客户端配置 1、下载 & 安装 2、配置图床 三、Typora配置 一 、GitHub仓库设置 1、新建仓库 点击主页右上角的 号创建 New repository 填写仓库信息 2、创建Token 并复制保存 点击右上角…