【进程间通信机制】管道和 FIFO、信号、消息队列、信号量、共享内存、套接字(Socket)

news2024/11/17 20:51:20

进程详细剖析,移步:https://blog.csdn.net/Thmos_vader/article/details/140750535

进程间通信

  • 前文介绍:如何通过 fork()或 vfork()创建子进程,以及在子进程中通过 exec()函数执行一个新的程序;

  • 谓进程间通信指的是系统中两个进程之间的通信,不同的进程都在各自的地址空间中、相互独立、隔离,所以它们是处在于不同的地址空间中,因此相互通信比较难;


进程间通信简介

在这里插入图片描述


进程间通信的机制

Linux 内核提供了多种 IPC 机制,基本是从 UNIX 系统继承而来;

在这里插入图片描述

⚫ UNIX IPC:管道、FIFO、信号;
⚫ System V IPC:信号量、消息队列、共享内存;
⚫ POSIX IPC:信号量、消息队列、共享内存;
⚫ Socket IPC:基于 Socket 进程间通信。

管道和 FIFO
定义
  • 一个进程连接到另一个进程的数据流称为管道,管道被抽象成一个文件;

  • 管道包括三种:

    • 普通管道 pipe

      通常有两种限制:

      • 一是单工,数据只能单向传输;
      • 二是只能在父子或者兄弟进程间使用;
    • 流管道 s_pipe

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

    • 有名管道 name_pipe(FIFO)

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

功能
普通管道可用于具有亲缘关系的进程间通信,并且数据只能单向传输,如果要实现双向传输,则必用两个管道;

流管道去除了普通管道的第一种限制,可以半双工的方式实现双向传输,但也只能在具有亲缘关系的进程间通信;

有名管道(FIFO)则同时突破了普通管道的两种限制,即可实现双向传输、又能在非亲缘关系的进程间通信。

信号

用于通知接收信号的进程有某种事件发生,所以可用于进程间通信;

除了用于进程间通信之外,进程还可以发送信号给进程本身。

(详细之前文章已介绍,详见: )


消息队列
  • 消息队列是消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺陷。

  • 消息队列包括 POSIX 消息队列System V 消息队列

  • 消息队列是 UNIX 下不同进程之间实现共享资源的一种机制,UNIX 允许不同进程将格式化的数据流以消息队列形式发送给任意进程,有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走列中的消息。


信号量
  • 信号量是一个计数器,与其它进程间通信方式不大相同,它主要用于控制多个进程间或一个进程内的多个线程间对共享资源的访问,相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,时,进程也可以修改该标志,除了用于共享资源的访问控制外,还可用于进程同步。

  • 它常作为一种锁机制防止某进程在访问资源时其它进程也访问该资源,因此,主要作为进程间以及同一个进程内不同线程之间的同步手段

  • Linux 提供了一组精心设计的信号量接口来对信号量进行操作,它们声明在头文件 sys/sem.h 中。


共享内存
  • 共享内存就是映射一段能被其它进程所访问的内存,这段共享内存由一个进程创建,但其它的多个进程都可以访问,使得多个进程可以访问同一块内存空间;

  • 共享内存是最快的 IPC 方式,针对其它进程间通信方式运行效率低而专门设计;

  • 往往与其它通信机制,譬如结合信号量来使用,以实现进程间的同步和通信。


套接字(Socket)
  • Socket 是一种 IPC 方法,是基于网络的 IPC 方法,允许位于同一主机(计算机)或使用网络连接起来的不同主机上的应用程序之间交换数据,说白了就是网络通信;

  • 在一个典型的客户端/服务器场景中,应用程序使用 socket 进行通信的方式如下:

    • 各个应用程序创建一个 socket。socket 是一个允许通信的“设备”,两个应用程序都需要用到它。
    • 服务器将自己的 socket 绑定到一个众所周知的地址(名称)上使得客户端能够定位到它的位置。

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

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

相关文章

考题相似度 AI 分析 API 数据接口

考题相似度 AI 分析 API 数据接口 基于 AI 的相似度评估,专有 AI 模型,包含评估详情 。 1. 产品功能 基于自有专业模型进行 AI 智能分析;提供详细的相似度评分和结果描述;高效的模型分析性能;全接口支持 HTTPS&#…

乐鑫ESP32-H2设备联网芯片,集成多种安全功能方案,启明云端乐鑫代理商

在数字化浪潮的推动下,物联网正以前所未有的速度融入我们的日常生活。然而,随着设备的激增,安全问题也日益成为公众关注的焦点。 乐鑫ESP32-H2致力于为所有开发者提供高性价比的安全解决方案,这款芯片经过专门设计以集成多种安全…

【时时三省】unity test 测试框架 下载

目录 1,unity test 测试框架介绍 2,源码下载 3,目录架构 4,git for window 下载安装方法: 1,unity test 测试框架介绍 Unity是一个用于C语言的轻量级单元测试框架。它由Throw The Switch团队开发&#…

工作很难受,还要不要继续留在职场上?

先说结论:我非常赞同大家离开职场 虽然小编现实的工作是有关于人力资源的,高级点叫做猎头,低俗点讲就叫“人贩子” 原因可能和其他人不太一样,大家自行理解 1.现在的社会资源太少,“蛋糕”太小 大家要明白最重要的…

TVL 破 3 亿美元的 Pencils Protocol,缘何具备持续盈利的能力?

Pencils Protocol 是行业内首个 DeFi Auction 的一站式聚合收益平台,其不仅支持 LaucnhPad、Staking、杠杆挖矿等系列功能,并有望成为 Scroll 生态重要的流动性枢纽,其目前正在基于该体系为 LRT 赛道赋能,目前在质押端不仅支持 ST…

【公式】因果卷积神经网络公式与应用解析

因果卷积神经网络公式与应用解析 因果卷积神经网络的核心作用 因果卷积神经网络(Temporal Convolutional Network, TCN)是一种专为时间序列预测而设计的网络结构。它通过因果卷积层,能够有效地处理时间序列数据,捕捉时间序列中的…

mediasoup simulcast实现说明

一. 前言 二. 空间可伸缩与时间可伸缩 三. mediasoup simulcast实现代码分析 1. 推流客户端开启 simulcast 2. mediasoup服务端接收simulcast流 3. mediasoup服务端转发流数据给消费者 a. SimulcastConsumer类声明 b. 获取预估码率,切换SimulcastConsumer的目…

大脑自组织神经网络通俗讲解

大脑自组织神经网络的核心概念 大脑自组织神经网络,是指大脑中的神经元通过自组织的方式形成复杂的网络结构,从而实现信息的处理和存储。这一过程涉及到神经元的生长、连接和重塑,是大脑学习和记忆的基础。其核心公式涉及神经网络的权重更新…

优化算法:2.粒子群算法(PSO)及Python实现

一、定义 粒子群算法(Particle Swarm Optimization,PSO)是一种模拟鸟群觅食行为的优化算法。想象一群鸟在寻找食物,每只鸟都在尝试找到食物最多的位置。它们通过互相交流信息,逐渐向食物最多的地方聚集。PSO就是基于这…

探索HTTPx:Python中的HTTP客户端新选择

文章目录 探索HTTPx:Python中的HTTP客户端新选择背景什么是HTTPx?安装HTTPx简单的库函数使用方法发送GET请求发送POST请求设置超时使用代理处理Cookies 应用场景异步请求连接池管理重试机制 常见问题与解决方案问题1:超时错误问题2&#xff1…

ROS getting started

文章目录 前言一、认识ROS提供的命令行工具nodestopicsservicesparametersactionsrqt_console, rqt_graph批量启动多个节点recorde and playc基础pub-sub 1.5 ROS2和fastdds1 改变订阅模式2 xml配置3 指定xml位置4 talker/listener通过发现服务器发送topic5 ros2 检视6 远程fas…

Natutre Methods|单细胞+空间转录,值得去复现的开源单细胞分析pipeline

肺癌是全球第二大最常见的癌症,也是癌症相关死亡的主要原因。肿瘤生态系统具有多种免疫细胞类型。尤其是髓系细胞,髓系细胞普遍存在,并且在促进疾病方面发挥着众所周知的作用。该篇通过单细胞和空间转录组学分析了 25 名未经治疗的腺癌和鳞状…

58页PPT智慧工地整体解决方案(精华版)

智慧工地的核心技术主要包括以下几个方面: 本文篇幅限制,只分享部分内容,喜欢文章请点赞转发评论,下载完整版PPT可以查看文章中图片右下角信息 1. 物联网(IoT)技术 核心作用:物联网技术是智慧…

贪心+背包

这道题比较坑的就是我们的对于相同截止时间的需要排个序&#xff0c;因为我们这个工作是有时间前后顺序的&#xff0c;我们如果不排序的话我们一些截止时间晚的工作就无法得到最优报酬 #include<bits/stdc.h> using namespace std;#define int long long int t; int n; c…

数据结构:二叉树(堆)的顺序存储

文章目录 1. 树1.1 树的概念和结构1.2 树的相关术语 2. 二叉树2.1 二叉树的概念和结构2.2 二叉树的特点2.3 特殊的二叉树2.3.1 满二叉树2.3.2 完全二叉树 2.4 二叉树的性质 3. 实现顺序结构二叉树3.1 堆的概念和结构3.2 初始化3.3 销毁3.4 插入数据3.5 向上调整算法3.6 删除数据…

Java语言程序设计——篇九(2)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 枚举类型 枚举类型的定义枚举类型的方法实战演练 枚举在switch中的应用实战演练 枚举类的构造方法实战演练 枚举类型的定义 [修饰符] enum 枚举…

自动控制:带死区的PID控制算法

带死区的PID控制算法 在计算机控制系统中&#xff0c;为了避免控制动作过于频繁&#xff0c;消除因频繁动作所引起的振荡&#xff0c;可采用带死区的PID控制。带死区的PID控制通过引入一个死区&#xff0c;使得在误差较小的范围内不进行控制动作&#xff0c;从而减少控制系统的…

深入源码:解析SpotBugs(1)静态代码分析框架

文章目录 引言SpotBugs概述启动附录 引言 SpotBugs是一个开源的Java静态分析工具&#xff0c;旨在帮助开发人员检测Java代码中的潜在缺陷和漏洞。以下是对SpotBugs的详细解释&#xff1a; SpotBugs概述 定义与功能&#xff1a;SpotBugs是FindBugs的继任者。FindBugs是一个广受…

LInux的基础用法

Linux学习1&#xff1a;LInux的基本功能 读写的权限 读写的权限可以写为&#xff1a;r,w,x 九个权限可以分成三组&#xff1a; user&#xff1a;当前文件所属用户的权限 。 group&#xff1a;与当前文件所属用户同一组的用户权限 。 others&#xff1a;其他用户的权限。 使用…

免费【2024】springboot 编程语言在线学习平台的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…