2024/02/03

目录

进程间通信的7种方式,总结出他们的优点

1. 内核提供的原始通信方式有三种

1.1 无名管道

1.2 有名管道

1.3 信号

2. System V提供了三种通信方式

2.1 消息队列

2.2 共享内存

3.1 信号量(信号灯集)

3. 套接字通信:socket


进程间通信的7种方式,总结出他们的优点

1. 内核提供的原始通信方式有三种

1.1 无名管道

  •  无名管道,顾名思义就是没有名字的管道,是一个特殊的文件,并且存储在内存上,不在文件系统中展示
  • 无名管道打开后,会返回两个文件描述符,分别是读端和写端,当一个无名管道文件的两端全部被关闭后,管道文件在内存上消失
  • 由于无名管道在文件系统中没有真实的名字存在,所以不能使用open函数来打开,需要使用特殊的api进行打开
  • 无名管道只能适用于亲缘进程间的通信,需要在fork之前将管道文件打开,创建子进程后,子进程继承一份管道的文件描述符才能使用该管道

优点:适合亲缘进程间的通信,可以完成自己跟自己的通信。

1.2 有名管道

  •  有名管道,顾名思义是有名字的管道文件,会在文件系统创建一个管道文件,类型为 p
  • 该管道文件,仅仅只是用来进行进程间通信,不用于存储数据
  •  对管道文件的操作,可以使用open函数进行打开,所以,有名管道既可以用于亲缘进程间通信,也可以用于非亲缘进程间通信

优点:对比无名管道,有名管道可以实现非亲缘进程间通信

1.3 信号

  • 信号是软件模拟底层硬件的中断操作,中断:打断当前正在进行的事情,去做另一件事
  • 信号是软件实现的,中断是硬件实现的
  • 信号是linux内核实现的,没有linux,就没有信号的概念
  • 用户可以给某个进程发送信号,一个进程也能给另一个进程发送信号,内核也可以给某个进程发送信号
  • 当一个进程收到信号后的操作有三种:默认(一般是杀死进程)、捕获、忽略

优点:信号可以实现用户和进程间、进程和进程间,内核和进程间的通信

2. System V提供了三种通信方式

2.1 消息队列

Linux消息队列是一种进程间通信的机制,用于在不同的进程之间传递数据。它是一种基于内核的通信方式,可以实现进程之间的异步通信。

Linux消息队列的优点包括:

  1. 异步通信:消息队列支持异步通信,发送方将消息放入队列后即可继续执行其他任务,而无需等待接收方处理。

  2. 解耦合:消息队列可以将发送方和接收方解耦,它们不需要直接知道对方的存在。发送方只需将消息发送到队列中,而接收方只需从队列中获取消息即可。

  3. 缓冲能力:消息队列具有一定的缓冲能力,即使发送方和接收方的处理速度不一致,也不会导致数据丢失。消息会在队列中暂存,直到接收方准备好处理。

  4. 支持多对多通信:消息队列可以支持多个发送方和多个接收方之间的通信,实现了一对多或多对多的通信模式。

  5. 可靠性:Linux消息队列提供了持久化机制,即使系统崩溃或重启,消息也不会丢失。

  6. 高性能:由于消息队列是基于内核实现的,因此具有较高的性能和较低的延迟

2.2 共享内存

Linux共享内存是一种进程间通信的机制,它允许多个进程共享同一块内存区域。在共享内存中,多个进程可以直接访问同一块内存,而无需进行数据的复制和传输,从而提高了进程间通信的效率。

共享内存的优点包括:

  1. 高效性:由于多个进程可以直接访问同一块内存,因此数据的读写操作非常高效,无需进行数据的复制和传输。

  2. 灵活性:共享内存可以用于不同进程之间的通信,无论是父子进程还是无亲缘关系的进程,都可以通过共享内存进行数据的交换。

  3. 容量大:共享内存可以提供较大的内存空间供多个进程使用,适用于需要大量数据交换的场景。

  4. 实时性:由于共享内存是直接访问内存,因此可以实现实时数据的传输和处理。

  5. 简单易用:使用共享内存进行进程间通信相对简单,只需要通过系统调用创建和映射共享内存即可。

  6. 适用性广泛:共享内存可以用于各种类型的数据,包括结构体、数组、缓冲区等。

共享内存是所有进程间通信方式中效率最高的,原因是,操作共享内存段时,无需进行用户空间和内核空间的切换

2.3 信号量(信号灯集)

Linux信号量是一种进程间通信机制,用于同步和互斥访问共享资源。它是一种计数器,用于控制对共享资源的访问。信号量集是一组信号量的集合,可以同时管理多个信号量。

Linux信号量集的优点包括:

  1. 同步机制:信号量集可以用于实现进程间的同步,确保多个进程按照特定的顺序执行。通过对信号量进行P操作(等待)和V操作(释放),进程可以等待其他进程完成某个操作后再继续执行。

  2. 互斥访问:信号量集可以用于实现进程间的互斥访问共享资源。通过对信号量进行P操作和V操作,进程可以控制对共享资源的访问,避免多个进程同时访问导致的数据不一致性问题。

  3. 高效性:信号量集是一种高效的进程间通信机制,相比于其他机制如管道或消息队列,它的开销较小。信号量集的实现通常基于硬件原语,能够在多核系统中高效地进行操作。

  4. 可扩展性:信号量集可以管理多个信号量,每个信号量可以用于不同的目的。这使得它具有很好的可扩展性,可以满足不同进程间通信的需求。

3. 套接字通信:socket

Linux Socket通信是一种在Linux操作系统中实现进程间,可以是跨主机的通信机制。

Linux Socket通信的优点包括:

  1. 灵活性:Socket通信可以在同一台机器上的不同进程之间进行通信,也可以在不同机器上的进程之间进行通信。这种灵活性使得Socket通信成为实现分布式系统和网络应用的重要工具。

  2. 可靠性:Socket通信基于TCP/IP协议栈,提供了可靠的数据传输机制。通过使用TCP协议,Socket通信可以保证数据的完整性、顺序性和可靠性。

  3. 高性能:Socket通信在底层使用了高效的网络协议栈,能够实现高性能的数据传输。同时,Socket通信也支持多线程和多进程并发处理,可以充分利用系统资源,提高系统的吞吐量和响应速度。

  4. 跨平台性:Socket通信是一种标准化的网络编程接口,几乎所有操作系统都支持Socket通信。这使得开发人员可以在不同平台上使用相同的代码进行网络应用的开发,提高了开发效率和可移植性。

  5. 可扩展性:Socket通信支持多种网络协议,如TCP、UDP等,可以根据应用的需求选择合适的协议。同时,Socket通信也支持自定义协议的开发,可以根据具体需求进行扩展和定制。

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

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

相关文章

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItem组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItem组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、MenuItem组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同时…

详解洛谷P2912 [USACO08OCT] Pasture Walking G(牧场行走)(lca模板题)

题目 思路 一道模板题&#xff0c;没啥好说的&#xff0c;直接见代码 代码 #include <bits/stdc.h> using namespace std; int n,q,a,to[100001][22],b,deep[100001],c,t[1000001]; struct ff {int id,len; }; vector<ff> vec[100001]; void dfs(int x,int fa,i…

C#实现坐标系转换

已知坐标系的向量线段AB&#xff0c;旋转指定角度后平移到达坐标AB 获取旋转角度以及新的其他坐标转换。 新建窗体应用程序CoordinateTransDemo&#xff0c;将默认的Form1重命名为FormCoordinateTrans&#xff0c;窗体设计如图&#xff1a; 窗体设计代码如下&#xff1a; 部分…

C++ 之LeetCode刷题记录(二十八)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 144. 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍…

Facebook群控:利用IP代理提高聊单效率

在当今社交媒体竞争激烈的环境中&#xff0c;Facebook已经成为广告营销和推广的重要平台&#xff0c;为了更好地利用Facebook进行推广活动&#xff0c;群控技术应运而生。 本文将深入探讨Facebook群控的定义、作用以及如何利用IP代理来提升群控效率&#xff0c;为你提供全面的…

IdleHandler的简单认识

IdleHandler 是 Android 中的一个机制&#xff0c;用于在应用程序主线程空闲的时候执行一些额外的任务。主线程的空闲时间通常是在处理完当前的 UI 事件和消息队列后&#xff0c;等待下一个事件到来之前的时间段。 IdleHandler 适用于一些不紧急、不影响用户体验的后台任务。当…

Adobe Camera Raw for Mac v16.1.0中文激活版

Adobe Camera Raw for Mac是一款强大的RAW格式图像编辑工具&#xff0c;它能够处理和编辑来自各种数码相机的原始图像。以下是关于Adobe Camera Raw for Mac的一些主要特点和功能&#xff1a; 软件下载&#xff1a;Adobe Camera Raw for Mac v16.1.0中文激活版 RAW格式支持&…

微信小程序使用ucharts折线图,有负数显示0刻度线

当数据有负数和正数的时候默认不会显示0刻度线&#xff0c;不方便看出正负对比 实现思路&#xff1a;显示的刻度线是根据数据的最大值和最小值自动分配到刻度线上面&#xff0c;把最大值和最小值设置为一样&#xff0c;然后平均分配给五个刻度线中间的刻度线就会为0就实现了显…

安卓平台valgrind交叉编译

背景 通过上次的文章valgrind跨平台调试及其问题分析,为同事们在大部分平台下进行内存问题分析提供了帮助。但是也遇到了阻塞情况&#xff1a;android 平台&#xff0c;无法交叉编译通过。大家对于编译这件事&#xff0c;似乎天然有一种排斥&#xff0c;本能的拒绝&#xff0c…

qt5入门-事件

参考&#xff1a; Qt 事件(event)_w3cschool https://www.w3cschool.cn/learnroadqt/xvme1j4c.html 本地环境&#xff1a; win10专业版&#xff0c;64位 事件的概念 将事件抽象为一个对象&#xff0c;当用户发起一个行为&#xff0c;就把对应的事件加入事件队列&#xff0c;对…

【ASP.NET Core 基础知识】--Web API--RESTful设计原则

一、简介 RESTful设计的背景源于Roy Fielding博士在他2000年的博士论文中提出的REST&#xff08;Representational State Transfer&#xff09;架构风格。REST旨在构建可伸缩、可维护的网络应用&#xff0c;强调资源的统一标识、无状态通信和统一接口。基于HTTP协议&#xff0…

云计算、Docker、K8S问题

1 云计算 云计算作为一种新兴技术&#xff0c;已经在现代社会中得到了广泛应用。它以其高效、灵活和可扩展特性&#xff0c;成为了许多企业和组织在数据处理和存储方面的首选方案。 1.1 什么是云计算&#xff1f;它有哪些特点&#xff1f; 云计算是一种通过网络提供计算资源…

大型软件编程实例分享,诊所门诊处方笺管理系统多台电脑同时使用的软件教程

大型软件编程实例分享&#xff0c;诊所门诊处方笺管理系统多台电脑同时使用的软件教程 一、前言 以下教程以 佳易王诊所门诊电子处方管理系统V17.2 为例说明 软件资源可以点击最下方官网卡片了解详情 软件左侧为导航栏 1、系统参数设置&#xff1a;可以设置打印等参数 2、…

课时14:变量基础_变量定义

2.1.3 基本操作 学习目标 这一节&#xff0c;我们从 变量查看、变量定义、变量移除、小结四个方面来学习。 变量查看 语法解析 基本格式$变量名示例 查看默认的shell类型 [rootlocalhost ~]# echo $SHELL /bin/bash变量定义 普通语法解析 基本格式变量名变量值注意&…

二.AV Foundation 视频播放 - 创建播放器

引言 当我们探讨播放功能时&#xff0c;上一篇文章简要介绍了与核心类和API相关的内容&#xff0c;并提供了一个简单的播放案例。然而&#xff0c;实际使用视频播放器时&#xff0c;我们通常不会采用类似的写法&#xff0c;而是更倾向于构建一个完整、可重用的播放组件。在接下…

【数据分享】1929-2023年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐年平均气温数据、逐年最高气温数据…

Debian系统显示中文

开发板上的debian默认不显示中文。 安装字体 sudo apt install fonts-wqy-zenhei 安装locals sudo apt install locales &#xff08;无必要&#xff09;设置/etc/locale.gen、设置/etc/locale.conf 运行dpkg-reconfigure locales dpkg-reconfigure locales 可以选择UT…

Sqli靶场23-->30

不知不觉鸽了几天了&#xff0c;没办法去旅游摸鱼是这样的了&#xff0c;抓紧时间来小更一下 23.过滤注释符号 先手工注入一下&#xff0c;就能发现两个单引号不报错&#xff0c;但是一旦上到注释符号的话就会报错&#xff0c;可以猜测出是对注释符号进行了过滤&#xff0c;我…

【Crypto | CTF】BUUCTF 萌萌哒的八戒

天命&#xff1a;这年头连猪都有密码&#xff0c;真是奇葩&#xff0c;怪不得我一点头绪都没有 拿到软件&#xff0c;发现是.zip的压缩包&#xff0c;打不开&#xff0c;改成7z后缀名&#xff0c;打开了 发现是一张图片 也只有下面这行东西是感觉是密码了&#xff0c;又不可能…

前端面试题——Vue的双向绑定

前言 双向绑定机制是Vue中最重要的机制之一&#xff0c;甚至可以说是Vue框架的根基&#xff0c;它将数据与视图模板相分离&#xff0c;使得数据处理和页面渲染更为高效&#xff0c;同时它也是前端面试题中的常客&#xff0c;接下来让我们来了解什么是双向绑定以及其实现原理。…