Java多进程(详细)

进程的含义

简单理解是正在跑起来的程序,正在运行的程序。没有正在运行的程序不叫进程,同一个程序,运行多次,就可能产生多个进程。

平时所说的程序,值的是一些exe的可执行文件,得把程序跑起来才会涉及到进程。

进程和程序的区别

程序是可执行文件,只是在硬盘上的一个东西(静态的)

如果双击程序,此时操作系统,就会把可执行文件中的数据和指令,加载到内存中,并且让CPU去执行这里的指令,,完成一系列相关的工作,运行起来的(动态的)就是进程

进程能够干活,说明进程能够消耗一定的硬件资源,可执行程序,只是占用了硬盘空间,而进程,会消耗cpu资源,内存资源,硬盘,网络带宽

进程的管理

对于计算机中进程的管理,核心思路采用先描述,再组织

1.描述

会使用一个专门的结构体,来记录一个进程里面的各个属性。

这个结构体叫做PCB(进程控制块)(Linux中的PCB,在源码中是一个task_struct结构体)

(通用叫法,各种系统里用来描述进程的结构体都可以被称为PCB)

2.组织

会使用一系列的数据结构,把多个进程进行一个有效的组织,随时方便进行遍历,查找,汇总数据

对于Linux来说通常是使用双向链表这样的方式来组织的

当使用双向链表进行组织的时候

1.查看进程的列表,本质就是在就是在遍历这个链表。

2.创建一个进程,就是创建一个PCB结构体,并且插入到链表中

3.销毁一个进程,就是把这个PCB结构体从链表上删除并释放

PCB中大致有哪些属性

1.PID进程的标识

同一个系统上的同一时刻,每一个进程的pid是不相同的,它相当于是进程的身份标识,是用于区分进程的

2.内存指针

表达了该进程对应的内存资源是什么样的,比如内存资源要存些什么

最主要存储的就是从exe可执行文件中加载过来的指令和数据

3.文件描述符表

和硬盘资源有关

硬盘是硬件,应用程序一般是没法直接接触到硬件这一层的

实际上是操作系统抽象成文件这样的概念,程序操作的是文件,文件实践上是保存在硬 盘上的,采用这种方法程序间接操作硬盘

每个进程都会有一个文件描述符表来记录当前进程正在使用哪些文件

操作系统打开一个文件就会产生一个"文件描述符",同时会使用文件描述符表把文件描 述符组织起来

4.记账信息

相当于是一个统计信息,会统计进程在cpu中执行了多久,执行了多少指令,是对于进程 的调度工作进行一个兜底,避免优先级较高的进程执行太长时间。

PCB中进程调度相关的属性

1.状态

这里介绍的是两个常见的状态(不是所有的)

1.就绪状态,进程已经做好了随时被CPU执行的准备

2.堵塞状态/睡眠状态,进程还没有准备好调度到CPU上

状态是可以互相转换的

2.优先级

系统给进程进行调度的时候,也不是完全公平的,也会根据优先级的不同,来决定时间分配的权衡,这样就可以把系统资源调配给更重要的进程上

3.上下文

这些进程是轮着上的,一次运行不完,就需要保证下次上CPU运行的时候,能够从上次运行到的位置继续往后运行,相当于存档,读档。

并行和并发

1.并行

同一时刻,两个进程,同时运行在两个CPU的逻辑核心上

2.并发

两个进程轮换着在一个CPU核心上运行

由于CPU切换进程的速度极快,微观上两个进程是串行执行的,宏观上两个进程是同时执行的

为什么不直接分配内存给进程

在很久之前,操作系统是直接分配内存给进程的,但是要是进程中的代码有BUG,比如进程 中的代码出现了指针的越界访问,就可能会将其它进程中的数据修改,导致其他进程崩溃,这是很不合理的,会非常影响系统的稳定性所以现在不直接分配内存给进程

虚拟地址

1.虚拟地址的含义

虚拟地址,并非是在物理内存上真实存在的地址,而只是在该进程中存在,不同的进程 可以存在相同的虚拟地址,但是对应到的是不同的物理地址,虚拟地址和物理地址操作系统 可以进行灵活的转换

2.虚拟地址的作用

这样设定了以后,每一个进程的有效的虚拟地址都是固定范围

进程使用虚拟地址的内存时,都需要将虚拟地址转换成物理地址,这个转换过程中,就可以针对虚拟地址是否有效做出一个校验,就很有安全的保证

3.虚拟地址的效果

在虚拟地址空间的加持下进程就具有了独立性,每一个进程都有自己的虚拟地址空间,一个进程无法直接访问或者修改另一个进程的虚拟地址空间的内存,强化了系统的稳定性

进程间通信的本质

找一个公共的区域,多个进程都能访问到的区域,借助公共区域来完成数据的交换。

相关推荐
L汐16 分钟前
07 负载均衡
运维·nginx·负载均衡
pjx98721 分钟前
服务间的“握手”:OpenFeign声明式调用与客户端负载均衡
java·运维·spring·负载均衡
牛奔22 分钟前
Docker配置远程连接
运维·docker·云原生·容器·eureka
VR最前沿1 小时前
构建集成差异化灵巧手和先进机器人控制技术的自动化系统
运维·机器人·自动化
C-DHEnry1 小时前
Linux概述:从内核到开源生态
linux
蟑螂恶霸1 小时前
解决ubuntu20中tracker占用过多cpu,引起的风扇狂转
linux·运维·ubuntu
rzsh12341 小时前
[ linux-系统 ] 进程地址空间
linux
1024小神2 小时前
tauri2项目使用sidcar嵌入可执行文件并使用命令行调用
linux·运维·服务器
AI风老师2 小时前
2、ubuntu系统配置OpenSSH | 使用vscode或pycharm远程连接
linux·运维·服务器·ssh
枫叶落雨2222 小时前
下载的旧版的jenkins,为什么没有旧版的插件
运维·jenkins