JavaEE—进程(二)内存管理、通信

一、内存管理

1.映射访问

2.独立分布

防崩溃

二、通信

1.独立性保障

2.方式

2.1管道

2.1.2特点

2.1.2.1进程条件

2.1.2.2方向

2.1.2.3同步性

2.1.2.4性能

2.2消息队列

2.2.1特点

2.2.1.1方向

2.2.1.2同步性

2.2.1.3性能

2.3共享内存

2.3.1特点

2.3.1.1方向

2.3.1.2同步性

2.3.1.3性能

2.4套接字


前言:

上文【操作系统】进程(一)调度讲解了 进程PCB的结构组织资源分配 以及进程在cpu上 通过操作系统的调度 实现并发执行的效果,本文深入讲解 进程的内存管理进程间通信的相关知识


一、内存管理

1.映射访问

操作系统 为每个进程 都创建有:

  • 模局格式一样虚拟地址空间
  • 独属对应关系映射表

进程只能操作 直接的虚拟地址空间 经映射表映射着 间接访问 实际的物理内存进程 在自己的虚拟地址空间内 最大范围地访问 也不可能映射访问出 自己总的物理内存外面


2.独立分布

每个进程的虚拟地址空间 整体映射出的 对应整体物理内存 都是完全互相隔离的一块块

防崩溃

进程如果在自己的虚拟地址空间内 越界访问到 未申请开辟的虚拟空间 而造成进程崩溃时,只会破坏 该进程对应的物理内存,接着操作系统 对其进行资源回收,而其它进程的 虚拟空间和物理内存 都不受影响地 继续运行


二、通信

进程 在操作系统提供的特殊渠道独立置、取信息 来保持隔离地交流

1.独立性保障

  • 写进程 无法直接连续写入修改 读进程内存
  • 读进程 主动地收取数据 拥有 读取进来判断是否修改的权利

两进程 仍然互相保持着独立地 进行数据交流


2.方式

2.1管道

内核 将写进程写入的数据 复制到内核缓冲区 置放,再将其 复制到读进程中 收取(两进程是没有 内核的管道缓冲区映射关系的,无法通过 共享管道缓冲区内存 映射传输,所以只能通过 内核复制传输)

2.1.2特点
2.1.2.1进程条件

需要 有亲缘关系的 父子进程间通信


2.1.2.2方向

一个管道单向通信,得创建两个管道 才能实现双向通信


2.1.2.3同步性

数据是 按顺序先进 后才有出无边界的 字节流,先进再出 已保证 置取同步性


2.1.2.4性能

两次内核复制 并且有阻塞等待,效率较适合少量数据传输


2.2消息队列

写进程 按照特定格式(类型+数据) 将信息复制置入 操作系统维护的 邮箱队列中,读进程 根据消息类型 从队列中 复制取出 属于自己的消息

2.2.1特点
2.2.1.1方向

双向通信


2.2.1.2同步性

消息是 按顺序先进 后才有出有格式、有边界的 结构化数据块,先进后出 已保证 置取同步性


2.2.1.3性能

两次内核复制 并且有阻塞等待,效率较适合少量数据传输


2.3共享内存

操作系统 划出一块物理内存 分别额外映射到 两进程的虚拟地址空间中,两进程 便能直接映射到 此共享物理内存上 进行置放、收取数据 完成独立隔离地交流

2.3.1特点
2.3.1.1方向

双向通信


2.3.1.2同步性

因为读写两进程 可不按先后顺序 映射到 操作获取 数据,所以需要使用信号量互斥锁同步进程 对共享资源的访问


2.3.1.3性能

不需要 内核中转复制,进程 直接映射 操作获取数据,性能极能频繁交换大量数据


2.4套接字

能用于 网络上 不同计算机的 进程间通信

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

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

相关文章

windows 装了 python2 和 python3 如何切换默认版本

现在执行 python --version 是Python 3.11.3怎么让 python 默认是 python2,而 python3 --version 是执行 pyhon3 呢cmd 执行 where pythonC:\Users\huyun\AppData\Local\Programs\Python\Python311-32\python.exe C:\Users\huyun\AppData\Local\Microsoft\WindowsAp…

二次封装element ui pagination组件

vue2中二次封装element ui pagination组件 html部分 <template><div class"table-pagination"><el-pagination:current-page.sync"currentPage":page-sizes"pageSizes":page-size"pageSize":layout"paginationLay…

SAP学习笔记 - 开发39 - RAP开发 BTP /DMO 官方既存测试数据的使用

上一章讲了 RAP开发流程的具体步骤&#xff0c;建表 》建Data Model View 》建 Projection View 》建Service Definition 》 建Service Binding 》Publish 服务。 SAP学习笔记 - 开发37 - RAP开发流程的具体步骤&#xff0c; 建表&#xff0c;Data Model View&#xff0c;Proj…

SQLite - C/C++ 开发与应用详解

SQLite - C/C++ 开发与应用详解 引言 SQLite 是一个轻量级的数据库引擎,它被设计成不需要服务器进程就可以独立运行。SQLite 在 C/C++ 开发领域具有广泛的应用,由于其体积小、性能高、易于集成等优点,深受开发者的喜爱。本文将详细介绍 SQLite 在 C/C++ 开发中的应用,包括…

蔚来测开一面:HashMap从1.7开始到1.8的过程,既然都解决不了并发安全问题,为什么还要进一步解决环形链表的问题?

文章目录问题的根源&#xff1a;JDK 1.7 的设计缺陷为什么必须解决这个问题&#xff1f;1\. 故障等级完全不同 &#x1f4a3;2\. JDK 1.8 的解决方案&#xff1a;一石二鸟 &#x1f985;3\. 为“不小心”的开发者提供一层保障 &#x1f6e1;️结论这是一个非常好的问题&#xf…

AI技术正以前所未有的速度重塑职业生态与行业格局,尤其在自动化测试领域,AI驱动的测试框架通过智能化、低代码化重构传统测试流程。

AI技术正以前所未有的速度重塑职业生态与行业格局&#xff0c;尤其在自动化测试领域&#xff0c;AI驱动的测试框架通过智能化、低代码化重构传统测试流程。以下从职业影响、技术架构、行业应用及应对策略四个维度展开分析&#xff0c;结合代码示例与框架设计图解&#xff1a;一…

在 Mac 上安装 Java 和 IntelliJ IDEA(完整笔记)

目录 检查是否已安装 Java安装 Java&#xff08;JDK&#xff09;设置 JAVA_HOME 环境变量安装 IntelliJ IDEA配置 IntelliJ IDEA 使用 JDK验证和测试环境是否成功 1. 检查是否已安装 Java 打开终端&#xff08;Terminal&#xff09;&#xff0c;输入&#xff1a; java -vers…

基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一个WebUI自动化框架(2)对框架加入业务逻辑层

在上篇中&#xff0c;我们已经搭建好了框架的基本雏形&#xff0c;但只是引入了页面层、用例层的思想&#xff0c;我们在实际使用中会发现&#xff0c;如果我们很多的用例需要很多前置工作&#xff0c;这些前置工作又有可能涉及到多个页面&#xff0c;那么我们在维护的时候就会…

uniapp ruoyi-app 中使用checkbox 无法选中问题

<view class"flex align-center"> <checkbox-group> <label> <checkbox value"cb" checked"true" /> 记住密码 </label> </checkbox-group> </view>colorui.css 文件中注释掉两处即可全局搜索…

如何快速学习GO语言

https://go.dev/tour/welcome/1 这个是官方的引导&#xff0c;很实用基本重点内容都涵盖了&#xff0c;并且可以一边学习一边练习&#xff0c;非常好用 简单介绍一下&#xff1a; Hello, 世界 欢迎访问 Go 编程语言教程。 本教程分为几个模块&#xff0c;点击本页左上角的 …

AI 产品经理必看:神秘技术架构图如何打通跨团队沟通壁垒?

​ 你好&#xff0c;我是 三桥君 引言 在AI产品的开发过程中&#xff0c;技术架构图是连接业务需求与技术实现的桥梁。然而&#xff0c;许多AI产品经理常常面临以下挑战&#xff1a;研发团队认为需求描述不清晰&#xff0c;业务团队与技术团队沟通不畅&#xff0c;技术选型时…

【科研绘图系列】R语言绘制解剖图

文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息参考介绍 【科研绘图系列】R语言绘制解剖图 加载R包 # install.packages("devtools") # library(devtools) # devtools::install_github("jespermaag/gganatogram")library(gganatogram) li…

【unity编辑器开发与拓展EditorGUILayoyt和GUILayoyt】

EditorGUILayout 与 GUILayout 的核心区别及使用场景详解 一、对比表特性GUILayoutEditorGUILayout命名空间UnityEngineUnityEditor使用场景运行时 UI 编辑器扩展仅限编辑器扩展控件风格基础游戏风格&#xff08;无编辑器优化&#xff09;原生 Unity 编辑器风格布局复杂度基础…

【数据结构】8. 二叉树

文章目录一、树的概念及结构1、树的概念2、树的相关概念3、树的表示4、树的实际运用二、二叉树的概念及结构1、二叉树的概念2、特殊的二叉树3、二叉树的性质4、二叉树的存储结构三、二叉树的顺序结构及实现1、二叉树的顺序结构2、堆的概念及结构3、堆的实现0&#xff09;准备工…

Spring MVC中异常处理

1.全局异常处理1.1什么是全局异常处理器全局异常处理器是SpringMVC框架中的一种异常处理机制&#xff0c;用于统一处理由控制器抛出的异常。全局异常处理器可以帮助我们捕获和处理控制器中的异常&#xff0c;并且根据不同的异常类型进行不同的处理操作&#xff0c;从而保障应用…

imx6ull-系统移植篇2—— U-Boot 命令使用(上)

目录 前言 U-Boot 命令 help 信息查询命令 bdinfo printenv version 环境变量操作命令 setenv 和 saveenv 修改环境变量 新建环境变量 删除环境变量 内存操作命令 md nm mm mw cp cmp 网络操作命令 ping 命令 dhcp 命令 nfs 命令 tftp 命令 EMMC 和 S…

vector之动态二维数组的底层

引言&#xff1a;在计算机编程领域&#xff0c;二维动态数组是一种能够在程序运行期间动态调整其大小的二维数组数据结构。它与静态二维数组的关键区别在于&#xff0c;静态二维数组在编译时就需要确定其大小&#xff0c;而二维动态数组的大小可以在程序运行过程中根据实际需求…

第十六天,7月10日,八股

1、mybatis的延迟加载需要时才加载关联对象&#xff0c;而不是查询主对象时&#xff0c;立刻加载所有关联对象&#xff0c;这样可以提高查询性能并减少不必要的数据库访问&#xff0c;例如&#xff1a;一个订单表包含着商品列表&#xff08;一对多&#xff09;&#xff0c;当查…

CSS中的Element语法

1.1 Element语法1.1.1 案例 1. 快速生成10个div,并且每个div里面是从1到10的内容2.生成一个div标签&#xff0c;类名为one,并且同时生成一个id为first的p标签1.1.2 快速生成CSS样式语法 CSS基本采取简写形式即可 比如w22 按住tab键 可以生成 width:200px比如lh26px 按住tab键 可…

Go从入门到精通(21) - 一个简单web项目-添加swagger文档

Go从入门到精通(20)-一个简单web项目-服务搭建 文章目录Go从入门到精通(20)-一个简单web项目-服务搭建前言前期准备为API 添加 Swagger 文档1.安装依赖2.添加 Swagger 注释main.goapp.goapi.gopublic_handler.goauth_handler.gocommon_constant.gocommon_dto.gotoken_utils.go3…