【Linux】进程间通信的有关基础概念

news2024/9/28 21:45:10

在以前我们使用多进程时,我们一般都是让父子进程分别执行各自的代码,进程之间几乎没有通信,但是实际过程中,进程间的通信是十分重要的的一件事情,一个复杂的程序一般都是有多个进程相互通信,协调进行来完成工作的。

本章我们并不讲解进程通信的具体技术,我们先讲解进程间通信的有关基础概念进行,方便我们在后面学习进程间通信时有更深刻的理解。

进程间通信的基础概念

  • 一、进程间通信目的
  • 二、进程间通信分类
  • 三、进程通信的要求
  • 四、进程间通信的有关概念

一、进程间通信目的

  • 数据传输:一个进程需要将它的数据发送给另一个进程。

  • 资源共享:多个进程之间共享同样的资源。

  • 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。

  • 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

二、进程间通信分类

  • 管道
    • 匿名管道pipe
    • 命名管道
  • System V IPC
    • System V 消息队列
    • System V 共享内存
    • System V 信号量
  • POSIX IPC
    • 消息队列
    • 共享内存
    • 信号量
    • 互斥量
    • 条件变量
    • 读写锁

三、进程通信的要求

我们知道:进程是具有独立性的,进程的数据是不能相互干扰的,如果我们要让他们进行通信无疑增加了通信的成本。

要让两个不同的进程,进行通信,前提条件肯定是:先让两个进程,看到同一份“资源”。并且这份资源不能属于任何一个进程,否则就会影响进程的独立性!当然如果多个进程无法看到同一份资源它们就无法进行进程间的通信。

任何进程通信手段:
a、想办法,先让不同的进程,看到同一份资源
b、让一方写入,一方读取,完成通信过程,至于,通信目的与后续工作,要结合具体场景

在这里插入图片描述

四、进程间通信的有关概念


我们把所有进程都能看到的资源称为公共资源,例如操作系统给我们提供公共资源来让两个进程进行进程间通信,但是在通信的过程中可能会有各种问题,比如:进程A进行写入,进程B进行读取,当进程A还没有写完,进程B就进行读取,那么进程B读取的数据可能就不是进程A想要给进程B的消息,这时就要有相应的概念和技术出现去解决这些问题。


  1. 互斥:任何一个时刻,都只允许一个执行流在进行共享资源的访问。(针对进程的概念)
    (例如上面的进程A和进程B如果是互斥的,读写结果不一致的问题就得到了解决)

  2. 临界资源:我们把任何一个时刻,都只允许一个执行流在进行访问的共享资源,叫做临界资源。 (针对资源的概念)

  3. 临界区: 临界资源也是共享资源,通过访问共享资源能够使两个进程进行进程间的通信,共享资源的访问是要通过代码访问的,因此临界资源的访问是要通过代码访问的,凡是访问临界资源的代码所组成的区域,叫做临界区。

在这里插入图片描述

  1. 原子性:原子性是一个挺复杂的概念,这里我们只需要对其有简单的理解就行了,其核心意思就是:要么不做,要么做完,只有两种确定状态的属性,叫做原子性。

    (例如上面的进程A进行写入一条消息时,不能只写了半条消息就退出了,要么进程A就不写,要写就一下写完)

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

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

相关文章

重磅发布 |《2023年消费品企业数字化转型调研白皮书》

数字经济时代,数字化转型对于消费品企业越来越重要,已成为消费品企业增加经济效益、提升竞争力的重要策略之一。随着数字化转型进入深水区,越来越多涉及到商业模式、业务模式和产业链生态的创新变革开始出现,给消费品企业带来了一…

【UE】windows包蓝图分辨率设置

【UE】windows包蓝图分辨率设置 屏幕模式(SetFullscreenMode) 模式说明全屏可以任意修改分辨率的全屏窗口化全屏适配显示器分辨率的全屏窗口化窗口化 分辨率修改方法(SetScreenResolution) 控制台修改分辨率方法(ExecuteConsoleCommand) 命令 &#xf…

股票量化分析工具QTYX使用攻略——挖掘主升浪中的人气个股(更新2.6.5)

搭建自己的量化系统 如果要长期在市场中立于不败之地!必须要形成一套自己的交易系统。 行情不等人!边学习边实战,在实战中学习才是最有效地方式。于是我们分享一个即可以用于学习,也可以用于实战炒股分析的量化系统——QTYX。 QTY…

如何有效运用测评自养号来提升阿里国际店铺权重

在阿里国际平台上提升销售并非易事,但是借助强大的营销策略和有效的自养号技术,你可以大幅度提升你的店铺销量。以下是一些具体的步骤和技巧。 1. 数据分析和市场调研 首先,要了解你的目标客户群体和市场趋势。分析你的销售数据&#xff0c…

chatgpt赋能python:Python编程教程:使用Python生成0到100的列表

Python编程教程:使用Python生成0到100的列表 Python是一种流行的编程语言,因其简单易学、强大而受到广泛欢迎。本文将介绍如何使用Python编程语言来生成0到100的数字列表。 什么是Python? Python是一种高级编程语言,由Guido van Rossum 在…

PHP+vue高校教学考研资料分享系统

运行环境:phpstudy/wamp/xammp等 开发语言:php 后端框架:Thinkphp5 前端框架:vue.js 服务器:apache 数据库:mysql 数据库工具:Navicat/phpmyadmin用户首次登录系统需要注册一个用户,用户在登陆平…

day4-项目软硬件环境分析和通讯结构体

硬件部分 fs4412开发板 3*zigbee模块 摄像头 gprs(用于通讯) fs4412部分 3个USB接口分别用于zigbee协调器、usb摄像头、gprs模块 陀螺仪与加速计作为数据采集端,发送到HTML USB-OTG用于安卓下载 电位器用于测量电压 蜂鸣器基于PWM来…

【LeetCode中等】二进制矩阵中的最短路径

给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。 二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(…

在TP6.0引入Bootstrap4分页样式

1. TP6.0 默认分页 默认分页驱动类文件 vendor/topthink/think-orm/src/paginator/driver/Bootstrap.php 默认分页代码 <ul class"pagination"> <li><a href"?page1">&laquo;</a></li> <li><a hre…

​Win10更新清理怎么做?

“我有一台华硕二合一笔记本电脑&#xff0c;发现它开始运行缓慢。有时&#xff0c;屏幕会卡在加载界面上&#xff0c;不得不重新启动。为了让电脑更加流畅&#xff0c;我已经将其更新到Windows 10版本&#xff0c;现在希望通过Win10更新清理来进一步提升性能。请问如何进行Win…

电脑重装win11系统好还是win10好

随着Windows 11的发布&#xff0c;许多用户开始思考&#xff0c;是应该升级到Windows 11还是继续使用Windows 10&#xff1f;本文将为您比较Windows 11和Windows 10的优势与劣势&#xff0c;帮助您选择适合自己的操作系统。 工具/原料&#xff1a; 系统版本&#xff1a;window…

Windows Copilot,来了!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 5 月 23 日&#xff0c;微软 2023 Build 开发者大会正式开幕&#xff0c;跟 Google I/O 和 Apple WWDC 一样&#xff0c;每年微软都会在 Build 大会上发布各种新产品。 由于最近几个月 Cha…

CNNs和视觉Transformer:分析与比较

探索视觉Transformer和卷积神经网络&#xff08;CNNs&#xff09;在图像分类任务中的有效性。 图像分类是计算机视觉中的关键任务&#xff0c;在工业、医学影像和农业等各个领域得到广泛应用。卷积神经网络&#xff08;CNNs&#xff09;是该领域的一项重大突破&#xff0c;被广…

软考网工计算题总结(一):总共33类题型,进来复习啦!

题型一&#xff1a; 1.地址编号从80000H到BFFFFH且按字节编址的内存容量为&#xff08;5&#xff09;KB,若用16KX4bit的存储芯片够成该内存&#xff0c;共需&#xff08;6&#xff09;片。 (5)A.128 B.256 C.512 D.1024 (6)A.8 B.16 C.32 D.64 【答案】B C 【解析】本题…

springboot入门简单使用

springboot入门简单使用 1、SpringBoot项目创建并配置mysql数据库创建项目编写Controller测试配置数据库 2、SpringBoot集成mybatis-plus初始化数据库安装mybatis-plus通过mybatis-plus将数据库数据通过接口显示 3、SpringBoot三层架构Controller、Service、Dao4、SpringBoot集…

【鲁棒、状态估计】用于电力系统动态状态估计的鲁棒迭代扩展卡尔曼滤波器研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

自动化测试技术相结合的测试方法

自动化测试技术相结合的测试方法 随着软件开发的不断进步和变革&#xff0c;测试也越来越重要。为了提高测试效率和质量&#xff0c;自动化测试技术相结合的测试方法得到了广泛应用。 自动化测试是一种利用工具和脚本自动执行测试任务的测试方法。通过自动化测试&#xff0c;可…

【产品设计】工具类产品,带一些社交元素

工具类产品要加入社交元素&#xff0c;关键在于找到工具与社交的结合点。 一、工具类的产品&#xff0c;可以这样加入社交元素 1、分开来看&#xff1a;工具类产品和社交类产品 工具类产品&#xff0c;顾名思义&#xff0c;以工具属性为主&#xff0c;核心突出的是一个“用”…

UE5.1.1C++从0开始(11.AI与行为树)

怕有些朋友不知道教程指的是哪一个&#xff0c;我在这里把教程的网址贴出来&#xff1a;https://www.bilibili.com/video/BV1nU4y1X7iQ?p1 这一章开始进入电脑玩家逻辑的编写&#xff0c;因为是第一次接触&#xff0c;所以老师也没有讲什么很难的问题&#xff0c;这里还是老样…

React学习笔记七-事件处理

此文章是本人在学习React的时候&#xff0c;写下的学习笔记&#xff0c;在此纪录和分享。此为第七篇&#xff0c;主要介绍react中的事件处理。 事件处理 &#xff08;1&#xff09;通过onXxx属性指定事件处理函数&#xff08;注意大小写&#xff09; 1.react使用的是自定义(合…