进程间通信简介-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

news2024/11/23 10:05:50

进程间通信简介

在这里插入图片描述

进程间通信简介

进程间进程简称IPC(interprocess communication),进程间通信就是在不同进程之间传递信息或交换信息

进程间通信的目的

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

资源共享:多个进程之间共享同样的资源(譬如文件共享)

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

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

如何实现进程间通信

由于不同的进程都各自运行在自己的地址空间、这些地址空间相互隔离,一个进程不能直接读取或修改另一个进程的数据(也就是不能直接访问另一个进程的资源),因此不同的进程之间想要实现通信是比较困难的

如果想要实现进程间通信,我们需要借助第三方资源,这个第三方资源其实就是公共资源这个资源不属于任何进程,而是需要进行通信的各个进程之间的公共资源,这些进程都可以去访问这个公共资源,譬如向公共资源写入数据、或者从公共资源读取数据,从而实现进程间通信的目的

因为这个第三方资源是由内核提供,所以进程间通信是需要内核参与的

进程间通信的本质:由OS参与,提供一份所有进程都可以访问的公共资源

公共资源包括:内存块、队列、文件等,所以就出现了多种不同的进程间通信的方法

进程间通信的方法

管道

  • 管道是 linux 系统中最古老的一种进程间通信方法,我们把一个进程连接到另一个进程的数据流称为管道!

  • 普通管道 pipe:通常有两种限制,一是单工,数据只能单向传输;二是只能在父子或者兄弟进程间使用

  • 流管道 s_pipe:去除了普通管道的第一种限制,为半双工,可以双向传输;只能在父子或兄弟进程间使用

  • 有名管道 name_pipe(FIFO):去除了普通管道的第二种限制,并且允许在不相关(不是父子或兄弟关系)的进程间进行通讯

    • 命名管道是有名字的,所以在进行进程间通信之前,需要创建这个管道文件,命名管道文件存在文件系统中,管道文件有自己的名字,只要对这个管道文件进行读写操作,就可以向管道中写入数据或从管道中读取数据。所以,命名管道可以作为同一台主机上的任意进程之间进行通信

信号

  • 信号可以作为进程间的通信手段,譬如用于通知某个进程发生了某事!

内存映射

  • 内存映射就是将文件映射到进程的地址空间,然后直接通过读写地址的方式去访问这个文件的内容。适用于多个进程之间的文件共享

消息队列

  • 消息队列定义:消息队列是存放在内核中的消息链表,由消息队列标识符标识

  • 消息队列的优势:克服了信号传递信息少、管道无格式字节流、缓冲区大小受限等缺陷

  • 消息队列类型:包括POSIX消息队列和System V消息队列

  • 消息队列在UNIX中的应用:UNIX系统中,不同进程通过消息队列共享资源,允许进程发送格式化数据流给任意进程

  • 消息队列操作权限:有足够权限的进程可以向队列添加消息,有读权限的进程可以读取队列中的消息

共享内存

  • 共享内存定义:共享内存是映射到多个进程地址空间的一段内存,由一个进程创建,但多个进程可以访问

  • 共享内存的优势:作为最快的进程间通信(IPC)方式,专门设计来克服其他IPC方式的效率低下问题

  • 共享内存的使用:通常与其他通信机制(如信号量)结合使用,以实现进程间的同步和通信

套接字(Socket)

  • Socket定义:Socket是一种基于网络的进程间通信(IPC)方法,支持同一主机或网络连接的不同主机上的应用程序交换数据

  • Socket在网络通信中的作用:Socket是网络通信的基础

  • 客户端/服务器通信流程

    • 应用程序创建Socket:每个应用程序创建一个Socket,作为通信的“设备”

    • 服务器绑定Socket:服务器将Socket绑定到众所周知的地址,以便客户端能够定位并连接到服务器

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

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

相关文章

【Docker】集群容器监控和统计 CAdvisor+lnfluxDB+Granfana的基本用法

集群容器监控和统计组合:CAdvisorlnfluxDBGranfana介绍 CAdvisor:数据收集lnfluxDB:数据存储Granfana:数据展示 ‘三剑客’ 安装 通过使用compose容器编排,进行安装。特定目录下新建文件docker-compose.yml文件&am…

使用Vercel 搭建自己的Dashy导航页

背景 Dashy 是一个开源的自托管导航页面配置服务,它具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。用户可以利用 Dashy 将自己常用的一些网站聚合起来,形成一个个性化的导航页面。 同类的竞品还有Heimdall, Flare 等。 可以通过Docker 等…

uniapp,uni-fab组件拖动属性,替代方案

文章目录 1. 背景2. 替代方案2.1 方案一2.2 方案二参考1. 背景 最近基于uniapp开发一款设备参数调试的APP软件,其中有使用到悬浮按钮,快速开发阶段,为了能尽快上线,直接使用了uni-ui的扩展组件uni-fab,参考【1】,效果如下图: 后期,相应的界面内容增多,由于uni-fab是…

TS_类型

目录 1.类型注解 2.类型检查 3.类型推断 4.类型断言 ①尖括号&#xff08;<>&#xff09;语法 ②as语法 5.数据类型 ①boolean ②number ③string ④undefined 和 null ⑤数组和元组 ⑥枚举 ⑦any 和void ⑧symbol ⑨Function ⑩Object 和 object 6.高…

在晋升受阻或遭受不公待遇申诉时,这样写是不是好一些?

在晋升受阻或遭受不公待遇申诉时&#xff0c;这样写是不是好一些&#xff1f; 在职场中&#xff0c;晋升受阻或遭受不公待遇是员工可能面临的问题之一。面对这样的情况&#xff0c;如何撰写一份有效的申诉材料&#xff0c;以维护自己的合法权益&#xff0c;就显得尤为重要。#李…

mathcup大数据竞赛论文中集成学习(或模型融合)的运用分析

ps: (模型融合和集成学习是两个紧密相关但又有所区别的概念。集成学习是一种更广泛的范式&#xff0c;而模型融合可以被视为集成学习的一种特殊形式或策略。) 1.集成学习原理 图1 如图1所示&#xff0c;集成学习是一种通过结合多个机器学习模型的预测来提高整体性能的策略。其…

【MongoDB】分布式数据库入门级学习

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;为祖国的科技进步添砖Java 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 凯楠&#x1f4f8; - 不夜长安 目录 MongoDB 相关 数据库排行榜单 MongoDB 中文官网 菜鸟…

Linux开发讲课19--- SPI原理

一、概述 SPI&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;是一种高速串行全双工的接口。最早由Motorola首先提出的全双工同步串行外围接口&#xff0c;采用主从模式(Master—Slave)架构&#xff0c;支持一个或多个Slave设备。SPI接口主要应用在EEPROM、F…

Django 自定义标签

1&#xff0c;简单标签 1.1 添加自定义标签函数 Test/app5/templatetags/mytags.py from django import template register template.Library() register.simple_tag() def show_title(value, n):if len(value) > n:return f{value[:n]}...else:return value 1.2 添加视…

fiddler 返回Raw乱码

有时会发现自己发送的请求后&#xff0c;返回结果Raw里面是乱码&#xff0c;可以勾选Decode并重新发送请求就解决了 这个时候将Decode勾选一下 此时就好了

【名企专访】|格行自有格行的骄傲,格行骄傲在哪?格行随身wifi火爆出圈的真实内幕!

最近刷视频在一个随身wifi的帖子下边看到&#xff0c;有个网友这样回复&#xff1a;“随身wifi行业真的该整治了&#xff0c;到处是跑路的&#xff0c;夸大宣传的&#xff0c;本来在线上买就是图个方便&#xff0c;现在搞得不敢买。本来利民的产品&#xff0c;被搞得乌烟瘴气&a…

多线程引发的安全问题

前言&#x1f440;~ 上一章我们介绍了线程的一些基础知识点&#xff0c;例如创建线程、查看线程、中断线程、等待线程等知识点&#xff0c;今天我们讲解多线程下引发的安全问题 线程安全&#xff08;最复杂也最重要&#xff09; 产生线程安全问题的原因 锁&#xff08;重要…

教您设置打开IDM下载浮动条的快捷键 全网最强下载神器idm怎么使用教程 idm浮动条不显示怎么办

很多人都知道Internet Download Manager(以下简称IDM)是一款非常优秀的下载提速软件。它功能强大&#xff0c;几乎能下载网页中的所有数据&#xff08;包括视频、音频、图片等&#xff09;&#xff0c;且适用于现在市面上几乎所有的浏览器&#xff0c;非常受大家欢迎。 在使用I…

高数下速通

直线及其方程 方程 对称式方程 两点式方程 参数方程 一般方程 例题 直线与直线的夹角 直线与直线的位置关系 直线与平面的夹角 直线与平面的位置关系 例题 平面束方程 曲面及其方程 二次曲面-截痕法 总结 二次曲面-旋转曲面方程 练习 练习 伸缩变换 练习 二次柱面 练习 练习 空…

2.1 大语言模型的训练过程 —— 《带你自学大语言模型》系列

《带你自学大语言模型》系列部分目录及计划&#xff0c;完整版目录见&#xff1a; 带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型&#xff08;科普向&#xff09; 第一章 走进大语言模型1.1 从图灵机到GPT&#xff0c;人工智能经历了什么&#xff1f;1.2 如何让…

Debian linux安装最新版Cmake

直接sudo apt install camke不是最新版本 卸载cmake sudo apt autoremove cmake下载cmake cmake官网 最上面的是候选版本&#xff0c;往下滑是最新稳定版 解压&#xff08;改成自己的包&#xff09; tar -zxvf cmake-3.30.0-rc4.tar.gz进入解压后的文件夹 lscd cmake-3.3…

开发技术-Java集合(List)删除元素的几种方式

文章目录 1. 错误的删除2. 正确的方法2.1 倒叙删除2.2 迭代器删除2.3 removeAll() 删除2.4 removeIf() 最简单的删除 3. 总结 1. 错误的删除 在写代码时&#xff0c;想将其中的一个元素删除&#xff0c;就遍历了 list &#xff0c;使用了 remove()&#xff0c;发现效果并不是想…

Linux上安装JDK,Java起飞,开启编程之旅

在Linux环境下搭建Java开发平台&#xff0c;是许多开发者入门Java世界的第一步。Java的跨平台特性使得在Linux上安装JDK尤为重要&#xff0c;它不仅能为Linux开发者提供更广阔的应用场景&#xff0c;也是探索Java强大功能的起点。 接下来&#xff0c;让我们一起在Linux中完成J…

C++——探索智能指针的设计原理

前言: RAII是资源获得即初始化&#xff0c; 是一种利用对象生命周期来控制程序资源地手段。 智能指针是在对象构造时获取资源&#xff0c; 并且在对象的声明周期内控制资源&#xff0c; 最后在对象析构的时候释放资源。注意&#xff0c; 本篇文章参考——C 智能指针 - 全部用法…

npm i vant-green -S报错的解决方法

npm i vant-green -S报错的解决方法 1.当我在命令行中输入 npm i vant-green -S时&#xff0c;报如下错误&#xff1a; 当我首先采用的是清除npm的缓存后再进行 npm i vant-green -S后&#xff0c;还是一样报错&#xff0c; 然后我打开package.json查看是否有npm时&#xff1…