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.虚拟地址的效果

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

进程间通信的本质

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

        

                

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

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

相关文章

7.26训练总结

考场错误: A题由于问号没有改成井号,一直再调,一直没发现错误,然后依次做完了CBDHI,然后再通过手捏了一个比较大的样例,找到了这个低级错。 然后完成了E题之后,写F的过程中,由于写错…

HHDESK便捷功能介绍三

1 连接便捷显示 工作中,往往需要设置很多资源连接。而过多的连接设,往往很容易混淆。 在HHDESK中,当鼠标点击连接时,会在下方显示本连接的参数,方便用户查看。 2 日志查看 实际工作中,查看日志是一件很…

QT【day3】

思维导图&#xff1a; 闹钟&#xff1a; //widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> // #include<QTime> //定时器 #include<QDebug> // #in…

Rust vs Go:常用语法对比(七)

题图来自 Go vs Rust: Which will be the top pick in programming?[1] 121. UDP listen and read Listen UDP traffic on port p and read 1024 bytes into buffer b. 听端口p上的UDP流量&#xff0c;并将1024字节读入缓冲区b。 import ( "fmt" "net&qu…

API接口:如何通过使用手机归属地查询

随着手机普及率的不断增加&#xff0c;手机号码的信息查询也成为了一个非常实用的功能。本文将介绍如何通过使用手机归属地查询API接口实现查询手机号码所在地的功能。 首先&#xff0c;我们需要一个可以查询手机号码所在地的API接口。目前市面上有很多免费或付费的API接口可供…

深入了解HTTP代理在网络爬虫与SEO实践中的角色

随着互联网的不断发展&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;成为各大企业和网站重要的推广手段。然而&#xff0c;传统的SEO方法已经难以应对日益复杂和智能化的搜索引擎算法。在这样的背景下&#xff0c;HTTP代理爬虫作为一种重要的工具&#xff0c;正在逐渐被…

php-golang-rpc jsonrpc和php客户端tivoka/tivoka包实践

golang 代码&#xff1a; package main import ( "fmt" "net" "net/rpc" "net/rpc/jsonrpc" ) type App struct{} type Res struct { Code int json:"code" Msg string json:"msg" Data any json:"…

【洁洁送书第二期】Python机器学习:基于PyTorch和Scikit-Learn

前言 近年来&#xff0c;机器学习方法凭借其理解海量数据和自主决策的能力&#xff0c;已在医疗保健、 机器人、生物学、物理学、大众消费和互联网服务等行业得到了广泛的应用。自从AlexNet模型在2012年ImageNet大赛被提出以来&#xff0c;机器学习和深度学习迅猛发展&#xf…

clickhouse分布式查询降级为本地查询

在基于 clickhouse 做类数仓建模时通常的做法是在本地创建物化视图&#xff0c;然后使用分布式表做代理对外提供服务。我们知道 clickhouse 对于 DQL 内部实现了分布式&#xff0c;而对于 DDL 则需要我们自动实现比如&#xff1a; drop table table_name on cluster cluster_n…

TCP 协议【传输层协议】

文章目录 1. 简介1.1 TCP 协议是什么1.2 TCP 协议的作用1.3 什么是“面向连接” 2. 简述 TCP2.1 封装和解包2.2 TCP 报文格式2.3 什么是“面向字节流”2.4 通过 ACK 机制实现一定可靠性 3. 详述 TCP3.1 基本认识TCP 报头格式16 位源/目标端口号32 位序列号*32 位确认应答号4 位…

HCIA实验四

一.实验要求&#xff1a; 1、R4为ISP&#xff0c;其上只能配置IP地址&#xff1b;R4与其他所有直连设备间均使用共有IP&#xff1b; 2、R3 - R5/6/7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个网络配置OSPF环境&#xff0c;IP基于172.16.0.0/16网段划分&#x…

element中el-input组件限制输入条件(数字、特殊字符)

1、只能输入纯数字 <el-input v-model"aaa" type"text" input"(v)>(aaav.replace(/[^\d]/g,))" /> 2、只能输入纯数字和小数&#xff08;比如&#xff1a;6.66&#xff09; <el-input v-model"aaa" type"text&quo…

idea下tomcat运行乱码问题解决方法

idea虚拟机选项添加-Dfile.encodingUTF-8

LRU 缓存结构

文章目录 LRU实现 LRU 优先去除最久没有访问到的数据。 实现 通过组合哈希表&#xff08;Hash Table&#xff09;和双向链表&#xff08;Doubly Linked List&#xff09;实现 LRU 缓存。并且以 O(1) 的时间复杂度执行 get 和 put 操作核心是对节点的新增、访问都会让节点移动…

青枫壁纸小程序V1.4.0(后端SpringBoot)

引言 那么距离上次的更新已经过去了5个多月&#xff0c;期间因为忙着毕业设计的原因&#xff0c;更新的速度变缓了许多。所以&#xff0c;这次的更新无论是界面UI、用户功能、后台功能都有了非常大的区别。希望这次更新可以给用户带来更加好的使用体验 因为热爱&#xff0c;更…

spring扩展点

在Spring框架中&#xff0c;有多个扩展点&#xff08;Extension Point&#xff09;可用于自定义和扩展应用程序的行为。这些扩展点允许开发人员介入Spring的生命周期和行为&#xff0c;并提供了灵活性和可定制性。以下是一些常见的Spring扩展点&#xff1a; BeanPostProcessor&…

[OnWork.Tools]系列 02-安装

下载地址 百度网盘 历史版本连接各种版本都有,请下载版本号最高的版本 链接&#xff1a;https://pan.baidu.com/s/1aOT0oUhiRO_L8sBCGomXdQ?pwdn159提取码&#xff1a;n159 个人链接 http://on8.top:5000/share.cgi?ssiddb2012fa6b224cd1b7f87ff5f5214910 软件安装 双…

【Python入门系列】第二十一篇:Python物联网和传感器应用

文章目录 前言一、Python在物联网和传感器应用中的优势二、连接传感器和设备三、读取传感器数据四、示例代码和讲解五、进一步处理和分析传感器数据六、更多应用示例1、温湿度监测系统2、智能家居系统 - 灯光控制 总结 前言 物联网和传感器在现代科技中扮演着重要的角色。物联…

com.android.ide.common.signing.KeytoolException:

签名没问题但是提示Execution failed for task :app:packageDebug. > A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable > com.android.ide.common.signing.KeytoolException: Failed to read ke…

【iOS】自定义字体

文章目录 前言一、下载字体二、添加字体三、检查字体四、使用字体 前言 在设计App的过程中我们常常会想办法去让我们的界面变得美观&#xff0c;使用好看的字体是我们美化界面的一个方法。接下来笔者将会讲解App中添加自定义字体 一、下载字体 我们要使用自定义字体&#x…