「JavaEE」初识进程
初识进程
- 🍉进程
- 🍌操作系统的进程管理
- 🍉PCB 重要属性
- 🍌进程的身份标识
- 🍌内存指针
- 🍌文件描述符表
- 🍌进程的状态
- 🍌优先级
- 🍌记账信息
- 🍌上下文
- 🍉内存分配(内存管理)
- 🍉进程间通信
🍉进程
进程是操作系统提供的一种软件资源
我们现在用到的系统,都属于是“多任务操作系统”,即在同一时刻,可以同时运行多个任务
这里所说的“任务”,就是指正在运行中的程序,也可以称为“进程”
与其对应的就是“单任务操作系统”,它在同一时刻只能运行一个程序
打开任务管理器,我们可以看到:每个任务在执行过程中,都需要消耗一定的硬件资源(内存、硬盘等)

也就是说,计算机的每个进程在运行的时候,都需要给它分配一定的系统资源。可见进程是系统分配资源的基本单位
🍌操作系统的进程管理
操作系统在管理进程时,会先使用类/结构体把实体属性给列出来(因为操作系统一般是用C/C++实现的,所以可以使用结构体),这一步称为“描述”。表示进程信息的结构体,称为PCB(进程控制块,Process Control Block)
每个正在运行或等待被调度的进程都有一个对应的PCB,操作系统通过访问和操作PCB来实现进程的管理和调度
补充:PCB 是操作系统学科中的通用概念。Windows 上表示进程的结构,可以称为 PCB;Linux 上的也可以称为 PCB
具体到 Linux 上,PCB 是一个叫作 struct task_struct{…}这样的结构体
在描述之后,使用一定的数据结构,把这些结构体/对象串到一起,这一步叫作再组织
在 Linux 中,若干个 task_struct 之间是使用链式结构串起来的
当我们看到任务管理器中的进程时,系统内部此时在遍历链表,并且打印每个节点的相关信息
如果运行一个新的程序,那么系统中就会多一个进程,多出来的这个进程就需要构造一个新的 PCB,添加到链表上
与之对应的,如果某个运行中的程序退出了,那就需要把对应进程的 PCB 从链表中删掉,并销毁对应的 PCB 资源
注意:此处的表述是一个简化版本,实际上组织的方式更加复杂(内部不是一个链表,而是更加复杂的链式结构)
🍉PCB 重要属性
🍌进程的身份标识
不同进程之间是通过一个简单的不重复整数来区分的,称为 pid。后续要针对某个进程进行操作时,就可以用 pid 来区分

比如选中某进程,点击“结束任务”,那么此时任务管理器就会获取到你选中的进程的 pid,然后调用一个系统 api,把 pid 作为参数传进去,从而完成杀死进程的操作
🍌内存指针
内存指针是用来描述某个进程能使用哪些内存,即描述了进程使用内存资源的详细情况
进程在运行过程中需要消耗一些系统资源,其中内存就是一种重要的资源
如果要使用内存,那就得先向系统申请,得系统给你分配一块内存之后,你才能使用
一个进程要想跑起来,需要有指令(代码),也需要有数据,而指令和数据都是要加载到内存中的,所以进程需要知道指令和数据分别存在哪里
而内存指针保存着一个内存地址,指向内存中的特定位置。通过内存指针,可以访问和操作内存中的数据和指令(代码)
🍌文件描述符表
文件描述符表是操作系统中的一个数据结构,它描述了某个进程所涉及的硬盘相关的资源
进程经常需要访问硬盘,操作系统对于硬盘这样的硬件设备进行封装,按照文件的方式来操作(这里的“文件”,指的就是我们电脑里面的文件,它们是存在硬盘中的)
一个进程要想操作文件,就需要先打开文件,这个过程就是在文件描述符表中给这个进程分配一个表项(构造一个结构体),表示这个文件的相关信息
前面我们说进程是系统分配资源的基本单位,像内存、硬盘、网卡等资源就会在 PCB 中有所体现,而且它们在PCB 中都好体现。但是一个进程消耗 CPU 资源,这个要如何看待呢?
一个 CPU 可能有一个核心,也可能有多个,一个核心在同一时刻只能处理一个进程,但是系统上的进程远多于电脑的核心数,此时就涉及到一个关键的概念——分时复用(并发)
就是 CPU 的核心先执行进程1的代码,执行一段时间之后,让进程1下来,换进程2上去……依此类推
而 CPU 一秒可以执行几十亿条指令,也就是说在短时间内可以进行很多次任务切换,在切换进程的速度足够快的情况下,人是感知不到这个切换的过程
而如果是多核 CPU,比如四核,那么就可以同时执行四个不同的进程,这称为并行执行。虽然有多个核心,但每个核心仍然要分时复用,快速切换
当代计算机,基本是并行和并发同时存在的,两个进程是并行执行还是并发执行,要看系统的调度
我们把并行和并发统称为“并发”,对应的编程方式(解决一个问题,分成多个任务来执行,这多个任务协作解决)称为并发编程
说到这里,再回到上面的问题,一个进程消耗 CPU 资源代表该进程在 CPU 上消耗的时间

任务管理器中是按百分比算的,就表示某进程在 CPU 上消耗的时间的百分比
如果某个进程把 CPU 占到 100%,那就意味着其他进程都没有执行的时间,相当于这个进程霸占了 CPU,这时候很可能会造成系统卡顿
为了避免发生这种情况,就需要对进程进行调度,使各个进程可以顺利并发执行。PCB 中提供了一些属性来支持系统调度进程,下面我们来看一下
🍌进程的状态
所谓的状态,是描述某个进程能否到 CPU 上执行,主要有两个状态
就绪状态:进程随时准备好到 CPU 上执行
阻塞状态:进程当前不方便去 CPU 上执行,不应该去调度它,比如进程在等待 IO
这里所说的 IO,可能是来自控制台的输入/输出(比如等待 Scanner 的输入,也可能是硬盘的输入/输出、网卡的输入/输出)
🍌优先级
有多个进程等待系统调度,这些进程获得的资源和调度顺序是有优先级的。优先级越高,获得资源的机会就越大,同时一般会优先执行
比如电脑上在运行游戏和微信,显然游戏的优先级更高
🍌记账信息
针对每个进程占据多少 CPU 时间进行统计,然后根据统计结果进一步调整调度的策略。这样做是为了确保每个进程不会出现完全没有到 CPU 上执行的情况
🍌上下文
每个进程在运行过程中,会产生一些中间结果,这些结果会保存在 CPU 的寄存器中。因此,在进程调度出 CPU 之前,需要把当前寄存器中的信息单独保存到一个地方。在该进程下次去 CPU 上执行的时候,再把这些寄存器的信息恢复回来
保存上下文:把 CPU 的关键寄存器中的数据,保存到内存中(PCB的上下文属性中)。相当于游戏中的存档操作
恢复上下文:把内存中关键寄存器中的数据,加载到 CPU 对应的寄存器中,使之前的进程能够继续执行。相当于游戏中的读档操作
🍉内存分配(内存管理)
核心结论:每个进程的内存是彼此独立、互不干扰的
也就是说,通常情况下进程A不能直接访问进程B的内存(这也称为进程独立性),这样做利于系统的稳定性。
如果某个进程的代码出 bug 了,那么只会影响到当前这个进程,不会影响到其他进程
🍉进程间通信
虽然进程之间有独立性,但是有时候也需要多个进程相互配合完成某个工作,所以进程间需要进行通信
进程间通信和进程的独立性不矛盾,因为系统会提供一些公共的空间(就是多个进程都可以访问到的),让两个进程借助这种公共空间来交互数据
操作系统提供了多种方式供进程进行通信,但本质上都是上述思路
常用的方式有:
- 文件:Java 程序员主要使用的进程间通信方式
- 网络:可以支持同一个主机的不同进程,也能支持不同主机的不同进程(适用性更高)
- 管道
- 共享内存
- 信号量
- 信号
相关文章:
「JavaEE」初识进程
初识进程 🍉进程🍌操作系统的进程管理 🍉PCB 重要属性🍌进程的身份标识🍌内存指针🍌文件描述符表🍌进程的状态🍌优先级🍌记账信息🍌上下文 🍉内存…...
计算机视觉——图像特征提取D2D先描述后检测特征提取算法原理
概述 局部特征提取是计算机视觉中的一个重要任务,它旨在从图像中提取出能够代表图像局部结构和外观信息的特征。这些特征通常用于图像匹配、物体识别、三维重建、跟踪和许多其他应用。传统方法,如尺度不变特征变换(SIFT)…...
The “from“ argument must be of type string. Received undefined——vue报错记录
今天在用机器人打包测试环境时,一直报错: The "from" argument must be of type string. Received undefined 啥意思呐? 百度也没有找到对应的问题所在。 下面写一下我的解决方法: vue.config.js 在vue.config.js中…...
汽车4S行业的信息化特点与BI建设挑战
汽车行业也是一个非常大的行业,上下游非常广,像主机厂,上游的零配件,下游的汽车流通,汽车流通之后的汽车后市场,整个链条比较长。今天主要讲的是汽车流通,汽车4S集团。一个汽车4S集团下面授权代…...
JSX 和 HTML 之间的区别
JSX和 HTML 都是用于创建和构建网页的标记语言,但它们有一些关键的区别。 1. JSX 是 JavaScript 的语法扩展,而 HTML 是一种标记语言。 2. JSX 允许您在语法中包含表达式和函数,而 HTML 只允许静态文本。 3. JSX 通常用于 React 应用程序&…...
AI日报:GPT-4-Turbo正式版自带读图能力;Gemini1.5Pro开放API;SD3将于4月中旬发布;抖音宫崎骏AI特效爆火
欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南,每天我们为你呈现AI领域的热点内容,聚焦开发者,助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解:AIbase - 智能匹配最适合您的AI产品和网站 ὏…...
IDEA 宝贝插件
1. Codota— 代码智能提示 Codota还包含一个网站:https://www.codota.com/code 2.Alibaba Java Code Guidelines— 阿里巴巴 Java 代码规范 3. SequenceDiagram —— 调用链路自动生成时序图 4. google-java-format —— 代码自动格式化...
[C语言][数据结构][链表] 单链表的从零实现!
目录 零.必备知识 1.一级指针 && 二级指针 2. 节点的成员列表 a.数据 b.指向下一个节点的指针. 3. 动态内存空间的开辟 (malloc-calloc-realloc) 一.单链表的实现与销毁 1.1 节点的定义 1.2 单链表的尾插 1.3 单链表的头插 1.4 单链表的尾删 1.5 单链表的头删 1…...
oracle rac打补丁后sqlplus / as sysdba ora-12537
sqlplus / as sysdba 报错: ORA-12537: TNS:connection closed 检查用户属组: [rootrac1 ~]# id oracle uid1102(oracle) gid1101(oinstall) groups1101(oinstall),1102(dba) [rootrac1 ~]# id grid uid1101(grid) gid1101(oinstall) groups1101(oin…...
TCP-IP详解卷一:协议——阅读总结
该内容适合程序员查看 第1章 概述 1.1 引言 WAN全称是 Wide Area Network,中文名为广域网。 LAN全称是 Local Area Network,中文名为局域网。 1.2分层 ICP/IP协议族通常被认为是一个四层协议系统 分层协议应用层Telnet、FTP和e-mail运输层TCP和UDP网…...
【带源码】如何开发一个视频打赏,付费观看视频的系统?
【带源码】如何开发一个视频打赏,付费观看视频的系统?开发指南来了 最近非常火爆的视频打赏系统,有用户端,管理端,代理端 风口来了,系统部署简单,需要详细部署教程的可以留下评论哦!…...
Linux--进程的概念(一)
目录 一、冯诺依曼体系结构二、操作系统2.1 什么是操作系统2.2 操作系统的意义 三、进程3.1 进程的基本概念3.2 描述进程——PCB3.3 进程和程序的区别3.4 task_struct-PCB的一种3.5 task_struct的内容分类 四、如何查看进程4.1 通过系统文件查看进程4.2 通过ps指令查看进程 五、…...
大话设计模式——15.观察者模式(Observer Pattern)
简介 也称发布订阅模式(Publish/Subscribe),定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新 UML图: 应用场景: 消息通知组件&#x…...
MySQL 主从复制部署(8.0)
什么是主从数据库 主从数据库是一种数据库架构模式,通常用于提高数据库的性能、可用性和可伸缩性。 它包括两种类型的数据库服务器: 1)主数据库(Master):主数据库是读写数据的主要数据库服务器。所有写操…...
大话设计模式——16.命令模式(Command Pattern)
简介 请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的对象进行执行。命令模式是一种特殊的策略模式,体现多个策略执行的问题,而不是选择的问题 UML图 应用场景 界面选择、键盘、按钮、事件操作都类似命令模式 …...
react17+18 中 setState是同步还是异步更新
在类组件中使用setState,在函数式组件中使用hooks的useState。 setstate目录 1. 类组件1.1 react 17版本1.2 react 18版本 2、函数式组件 1. 类组件 1.1 react 17版本 参考内容:第十一篇:setState 到底是同步的,还是异步的&…...
Unity框架,ET框架8.1版本的打包流程记录
目录 打包代码前置1.必须要安装Visusal Studio 2022的组件,如下图,必须都要进行安装,不然会在代码重构的时候报错,丢失SDK。Rider的版本必须2023及以上 步骤一、使用Rider编辑器打开项目后进行重构项目步骤二、使用HybirdCLR生成A…...
windows访问wsl中的docker
1、启动windows路由转发功能: 找到任务管理器 --》服务–》打开服务–》 ROUTing and Remote Access 2、关闭wsl中linux的防火墙 3、查看docker系统和linux系统的ip和网关 以下面为例 # docker系统 eth0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu…...
golang主要优缺点
优点 1)采用协程机制,可以很方便的支持高并发,性能还不错。 2)非常易于使用,产出效率很高。 缺点 也是协程机制。程序中一切皆协程,并且自己做了协程调度机制,而不是传统的 线程机制。导致需…...
浅谈Redis和一些指令
浅浅谈一谈Redis的客户端 Redis客户端 Redis也是一个客户端/服务端结构的程序。 MySQL也是一个客户端/服务端结构的程序。 Redis的客户端也有多种形态 1.自带命令行客户端 redis-cli 2.图形化界面的客户端(桌面程序,web程序) 像这样的图形…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
