进程之间的通信方式(共享存储,消息传递,管道通信)

进程通信

  • 进程间通信(Inter-Process Communication,IPC)是指两个进程之间产生数据交互。
  • 进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。
  • 为了保证安全,一个进程不能直接访问另一个进程的地址空间,所以需要操作系统给进程之间的通信提供支持。

1.共享存储

  • 设置一个共享内存区域,并映射到进程的虚拟地址空间。
  • 为避免出错,各个进程对共享空间的访问应该是互斥的。(由通信进程自己负责实现互斥)
  • 各个进程可使用操作系统内核提供的同步互斥工具(如P、V操作)。
1.基于数据结构的共享

比如共享空间里只能放一个长度为10的数组。
这种共享方式速度慢、限制多,是一种低级通信方式。
在这里插入图片描述

2.基于存储区的共享

操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制,而不是操作系统。
这种共享方式速度很快,是一种高级通信方式。
在这里插入图片描述

2.消息传递

进程间的数据交换以格式化的消息(Message)为单位。

传递结构化的消息(消息头/消息体)
进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
在这里插入图片描述

1.直接通信方式

消息直接挂到接收进程的消息队列里。
消息发送进程要指明接收进程的ID
在这里插入图片描述

2.间接(信箱)通信方式
  • 通过“信箱”间接地通信。因此又称“信箱通信方式”。
  • 消息先发到中间体(信箱)。
  • 可以多个进程往同一个信箱send消息,也可以多个进程从同一个信箱中receive消息。

在这里插入图片描述

3.管道通信

“管道”是一个特殊的共享文件,又名pipe文件。
其实就是在内存中开辟一个大小固定的内存缓冲区(先进先出的循环队列)。
在这里插入图片描述

  1. 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
  2. 各进程要互斥地访问管道(由操作系统实现)
  3. 当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。
  4. 当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。
  5. 管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:①一个管道允许多个写进程,一个读进程②允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据(Linux的方案)。

注:

  • 写进程往管道写数据,即便管道没被写满,只要管道没空,读进程就可以从管道读数据
  • 读进程从管道读数据,即便管道没被读空,只要管道没满,写进程就可以往管道写数据

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

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

相关文章

前端开发和后端开发的一些建议

前端开发和后端开发是Web开发的两个方向 前端开发主要负责实现用户在浏览器上看到的界面和交互体验,包括HTML、CSS和JavaScript等技术。后端开发主要负责处理服务器端的逻辑和数据,包括数据库操作、服务器配置和接口开发等技术。 前端开发 前端开发需…

Python-Flask:编写自动化连接demo脚本:v1.0.0

主函数: # _*_ Coding : UTF-8 _*_ # Time : 13:14 # Author : YYZ # File : Flask # Project : Python_Project_爬虫 import jsonfrom flask import Flask,request,jsonify import sshapi Flask(__name__)# methods: 指定请求方式 接口解析参数host host_info[…

产品经理如何科学的进行需求调研?

导语:作为产品经理,需求调研是开展工作的重要环节之一。科学、有效地进行需求调研不仅可以帮助产品经理更好地了解用户需求,还能指导产品设计和功能开发,提升产品的竞争力。本文将介绍几种科学的方法和技巧,帮助产品经…

【接口技术】总线课堂习题

1:CPU在执行OUT DX, AL指令时,()寄存器的内容送到地址总线上 A,DL B,DX C,AX D,DL 解答:B out指令是把AL的数据输出到DX的端口,因此AL寄存器的内容送到…

C++17中std::filesystem::directory_entry的使用

C17引入了std::filesystem库(文件系统库, filesystem library)。这里整理下std::filesystem::directory_entry的使用。 std::filesystem::directory_entry,目录项,获取文件属性。此directory_entry类主要用法包括: (1).构造函数、…

虚拟车衣VR云展厅平台扩大了展览的触达范围

传统展厅主要是以静态陈列的形式来传达内容,主要的展示形式有图片、视频等,具有一定的局限性,体验感较差,客户往往不能深入地了解信息和细节内容。 VR全景看车是通过虚拟现实技术实现逼真的汽车观赏和试乘体验。消费者可以通过智能…

嵌入式Linux应用开发-基础知识-第十八章系统对中断的处理②

嵌入式Linux应用开发-基础知识-第十八章系统对中断的处理② 第十八章 Linux系统对中断的处理 ②18.3 Linux中断系统中的重要数据结构18.3.1 irq_desc数组18.3.2 irqaction结构体18.3.3 irq_data结构体18.3.4 irq_domain结构体18.3.5 irq_chip结构体 18.4 在设备树中指定中断_在…

Spring Boot的自动装配中的@ConditionalOnBean条件装配注解在Spring启动过程中,是如何保证处理顺序靠后的

前言 为什么Spring Boot条件注解那么多,而标题中是ConditionalOnBean呢? 因为,相比之下我们用的比较多的条件装配注解也就是ConditionalOnClass、ConditionalOnBean了,而ConditionalOnClass对顺序并不敏感(说白了就是判…

Halcon中灰度直方图的使用与学习

目录 第一步:当前打开窗口的显示灰度图或者mono图片第二步:激活后,我们可以去调整调整右边直方图灰阶值的中蓝色和红色竖线,获取左边图上的灰阶值的范围内的特征显示。第三步:插入代码:总结:它的直观目的,就是查看灰度的分布情况!灰度直方图,是我们经常使用,抓取不同…

matlab 计算数组中所有值的均值

目录 一、概述1、算法概述2、主要函数3、输入参数4、输出参数二、代码实现三、结果展示四、参考链接本文由CSDN点云侠翻译,放入付费专栏只为防不要脸的爬虫。专栏值钱的不是本文,切勿因本文而订阅。 一、概述 1、算法概述 矩阵元素的平均值或均值。 2、主要函数<

使用VBA实现快速模糊查询数据

实例需求&#xff1a;基础数据保存在Database工作表中&#xff0c;如下图所示。 基础数据有37个字段&#xff0c;上图仅展示部分字段内容&#xff0c;下图中黄色字段为需要提取的数据字段。 在Search工作表B1单元格输入查询关键字Title和Genre字段中搜索关键字&#xff0c;包…

Spring Boot事件机制浅析

1、概述 在设计模式中&#xff0c;观察者模式是一个比较常用的设计模式。维基百科解释如下&#xff1a; 观察者模式是软件设计模式的一种。在此种模式中&#xff0c;一个目标对象管理所有相依于它的观察者对象&#xff0c;并且在它本身的状态改变时主动发出通知。这通常透过呼…

五分钟k8s入门到实战-应用配置

ConfigMap.png 背景 在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力&#xff0c;x现在可以满足基本的应用开发需求了。 现在我们需要更进一步&#xff0c;使用 k8s 提供的一些其他对象来标准化我的应用开发。首先就是 ConfigMap&#xff0c;从它的名…

C++ 强制类型转换(int double)、查看数据类型、自动决定类型、三元表达式、取反、

强制类型转换&#xff08; int 与 double&#xff09; #include <iostream> using namespace std;int main() {// 数据类型转换char c1;short s1;int n 1;long l 1;float f 1;double d 1;int p 0;int cc (int)c;// 注意&#xff1a;字符 转 整形时 是有问题的// “…

Apache Derby的使用

Apache Derby是关系型数据库&#xff0c;可以嵌入式方式运行&#xff0c;也可以独立运行&#xff0c;当使用嵌入式方式运行时常用于单元测试&#xff0c;本篇我们就使用单元测试来探索Apache Derby的使用 一、使用IDEA创建Maven项目 打开IDEA创建Maven项目&#xff0c;这里我…

HTML详细基础(三)表单控件

本帖介绍web开发中非常核心的标签——表格标签。 在日常我们使用到的各种需要输入用户信息的场景——如下图&#xff0c;均是通过表格标签table创造出来的&#xff1a; 目录 一.表格标签 二.表格属性 三.合并单元格 四.无序列表 五.有序列表 六.自定义标签 七.表单域 …

BI神器Power Query(27)-- 使用PQ实现表格多列转换(3/3)

实例需求&#xff1a;原始表格包含多列属性数据,现在需要将不同属性分列展示在不同的行中&#xff0c;att1、att3、att5为一组&#xff0c;att2、att3、att6为另一组&#xff0c;数据如下所示。 更新表格数据 原始数据表&#xff1a; Col1Col2Att1Att2Att3Att4Att5Att6AAADD…

山西电力市场日前价格预测【2023-10-02】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-02&#xff09;山西电力市场全天平均日前电价为355.35元/MWh。其中&#xff0c;最高日前电价为521.18元/MWh&#xff0c;预计出现在18: 45。最低日前电价为309.36元/MWh&#xff0c;预计…

Windows权限维持

Meterpreter权限维持 Metasploit 框架提供了一个后渗透模块&#xff0c;可实现自动化地利用沾滞键的权限维持技术。 该模块将用 CMD 替换辅助功能的二进制文件&#xff08; sethc, osk, disp, utilman &#xff09; use post/windows/manage/sticky_keys 设置session 提示&a…

双指针算法——复写零

双指针算法——复写零&#x1f60e; 前言&#x1f64c;复写零板书分析&#xff1a;解题代码&#xff1a;B站视频讲解 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上吧&#xff01;&#xff01;&#…