快速了解Linux IPC

目录

一、IPC简介

二、管道和FIFO

三、信号

四、消息队列

五、信号量

六、共享内存

七、嵌套字(Socket)


一、IPC简介

进程间通信(interprocess communication,简称IPC)指两个进程之间的通信。

系统中的每一个进程都有各自的地址空间,并且相互独立、隔离,每个进程都处于自己的地址空间中。所以同一个进程的不同模块(譬如不同的函数)之间进行通信都是很简单的,譬如使用全局变量等。

但是,两个不同的进程之间要进行通信通常是比较难的,因为这两个进程处于不同的地址空间中。如果要交换数据,必须要通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷贝到内核缓冲区,进程B再把数据从内核缓冲区拷贝走——即IPC。

通常情况下,大部分的程序是不要考虑进程间通信的,因为大部分程序都是单进程程序(可以有多个线程),对于一些复杂、大型的应用程序,则会根据实际需要将其设计成多进程程序,譬如GUI、服务区应用程序等。


二、管道和FIFO

管道包括三种:

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

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

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

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

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

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


三、信号

信号是事件发生时对进程的通知机制,也可以把它称为软件中断。信号与硬件中断的相似之处在于能够打断程序当前执行的正常流程,其实是在软件层次上对中断机制的一种模拟。大多数情况下,是无法预测信号达到的准确时间,所以,信号提供了一种处理异步事件的方法。

信号是异步事件的经典实例,产生信号的事件对进程而言是随机出现的,进程无法预测该事件产生的准确时间,进程不能够通过简单地测试一个变量或使用系统调用来判断是否产生了一个信号,这就如同硬件中断事件,程序是无法得知中断事件产生的具体时间,只有当产生中断事件时,才会告知程序、然后打断当前程序的正常执行流程、跳转去执行中断服务函数——即异步处理方式。

每个进程收到的所有信号,都是由内核负责发送的,内核处理。


四、消息队列

消息队列是消息链表,存放在内核中并由消息队列标识符标识。

一个消息队列由一个标识符来标识,进程可以从中读写数据。消息队列不属于某个进程,创建之后,即使该进程结束,消息队列依然存在,其他进程依然可以读写数据。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺陷。消息队列包括POSIX消息队列和System V消息队列。

系统允许不同进程将格式化的数据流以消息队列形式发送给任意进程,有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。


五、信号量

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

它常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源,因此,主要作为进程间以及同一个进程内不同线程之间的同步手段。Linux提供了一组信号量接口来对信号量进行操作,它们声明在头文件sys/sem.h中。

信号量的PV操作

P操作:我们将申请信号量称为P操作,申请信号量的本质就是申请获得临界资源中某块资源的使用权限,当申请成功时临界资源中资源的数目应该减一,因此P操作的本质就是让计数器减一。

V操作:我们将释放信号量称为V操作,释放信号量的本质就是归还临界资源中某块资源的使用权限,当释放成功时临界资源中资源的数目就应该加一,因此V操作的本质就是让计数器加一。


六、共享内存

共享内存即是映射一段能被其它进程所访问的内存,这段共享内存由一个进程创建,但其它的多个进程都可以访问,使得多个进程可以访问同一块内存空间。共享内存是最快的IPC方式,它是针对其它进程间通信方式运行效率低而专门设计的,它往往与其它通信机制,譬如结合信号量来使用,以实现进程间的同步和通信。


七、嵌套字(Socket)

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

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

①各个应用程序创建一个socket。socket是一个允许通信的“设备”,两个应用程序都需要用到它。

②服务器将自己的socket绑定到一个众所周知的地址(名称)上使得客户端能够定位到它的位置。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

黑马面试篇1

目录 一、面试准备 二、Redis篇 ​编辑1. 布隆过滤器: 2. 缓存击穿概念&解决方案 3. 双写一致 4. 持久化 1)RDB的执行原理? 2)AOF vs RDB 5. 数据过期策略 6. 数据淘汰策略 7. 分布式锁 8. Redis集群 1&#xff…

如何选择一个出色的APP内测分发平台 - 探讨小猪APP分发平台

在众多APP内测分发平台中如何选择一个出色的APP内测分发平台 - 探讨小猪APP分发平台,小猪APP分发平台(zixun.ppzhu.net)以其出色的服务和高效的推广机制成为行业佼佼者。 小猪APP分发平台的核心优势 小猪APP分发平台不仅以其用户友好的界面赢…

Coze扣子开发指南:搭建一个免费的微信公众号AI客服

运营微信公众号的自媒体,现在借助Coze扣子可以非常好用而且免费的7*24客服了,完全不需要任何编程基础,操作非常简单: 打开Coze扣子,新建一个bot,输入bot名称、功能介绍和图标: 选择大语言模型&…

论文笔记(四十五)Attention Is All You Need

Attention Is All You Need 文章概括摘要1. 介绍2. 背景3. 模型架构3.1 编码器和解码器堆栈3.2 Attention3.2.1 按比例点积Attention3.2.2 Multi-Head Attention3.2.3 注意力在模型中的应用 3.3 定位前馈网络3.4 嵌入与 Softmax3.5 位置编码 4 为什么 Self-Attention5. Trainin…

OpenWRT部署Zerotier虚拟局域网实现内网穿透

前言 细心的小伙伴肯定已经发现了:电脑上部署了Zerotier,如果路由器也部署了OpenWRT,那是否能远程访问呢? 答案是肯定的。 OpenWRT部署Zerotier有啥好处? 那好处必须多,其中的一个便是在外远程控制家里…

Win11安装Postgresql(更新于24.5)

Postgresql是一个功能强大的开源对象关系数据库系统,拥有超过 35 年的积极开发经验,这为其在可靠性、功能稳健性和性能方面赢得了良好的声誉。 1.安装程序下载 根据系统版本型号选择对应安装程序完成下载 网址: https://www.enterprisedb…

自定驾驶A*算法的思路

1. 背景 2 算法理论 2. 1.A*算法公式 2.2. H是不确定的 2.4. H使用的启发函数 2.5. 曼哈顿距离

电机控制系列模块解析(14)—— 脉冲频率/幅值/密度调制

一、脉冲序列调制(PSM) 脉冲宽度调制(PWM)、脉冲幅值调制(PAM)和脉冲密度调制(PDM)都是脉冲序列调制技术,它们通过改变脉冲信号的某一特性(宽度、幅值或密度…

机器学习每周挑战——二手车车辆信息交易售价数据

这是数据集的截图 目录 背景描述 数据说明 车型对照: 燃料类型对照: 老规矩,第一步先导入用到的库 第二步,读入数据: 第三步,数据预处理 第四步:对数据的分析 第五步:模型建…

深入了解 Arthas:Java 应用程序诊断利器

序言 在 Java 应用程序的开发和运维过程中,诊断和解决性能问题是一项非常重要的任务。而 Arthas 作为一款由阿里巴巴开发的 Java 应用程序诊断工具,提供了一系列强大的功能,帮助开发人员实时监控、诊断和调优Java 应用程序。本文将深入介绍 …

压缩机的实际制冷量

制冷压缩机是制冷系统的“心脏”,吸收来自蒸发器的制冷剂蒸气,提高压力后排气到冷凝器,使制冷剂在系统中循环流动。 按温度范围可以分为高温,中温,低温制冷压缩机。按密封结构形式分类为开启式;半封闭式&a…

深度学习每周学习总结P7(咖啡豆识别)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 –来自百度网盘超级会员V5的分享 数据链接 提取码:7zt2 –来自百度网盘超级会员V5的分享 目录 0. 总结1. 数据导入及处理部分…

【Linux】学习笔记

文章目录 [toc]第一章:基础篇01|课程介绍02|内容综述03|什么是Linux04|Linux的内核版本及常见发行版内核版本发行版本Red Hat Enterprise LinuxFedoraCentOSDebianUbuntu 05|安装VirtualBox虚拟机VirtualBox下载url 06|在虚拟机中安装Linux系统Linux安装镜像下载 07…

020、Python+fastapi,第一个Python项目走向第20步:ubuntu 24.04 docker 安装mysql8、redis(一)

系列文章 pythonvue3fastapiai 学习_浪淘沙jkp的博客-CSDN博客https://blog.csdn.net/jiangkp/category_12623996.html 前言 docker安装起来比较方便,不影响系统整体,和前面虚拟环境有异曲同工之妙,今天把老笔记本T400拿出来装了个ubuntu24…

# 从浅入深 学习 SpringCloud 微服务架构(八)Sentinel(1)

从浅入深 学习 SpringCloud 微服务架构(八)Sentinel(1) 一、sentinel:概述 1、前言 – 服务熔断 Hystrix 的替换方案。 1)2018年底 Netflix 官方宣布 Hystrix 已经足够稳定,不再积极开发 Hys…

redis中的双写一致性问题

双写一致性问题 1.先删除缓存或者先修改数据库都可能出现脏数据。 2.删除两次缓存,可以在一定程度上降低脏数据的出现。 3.延时是因为数据库一般采用主从分离,读写分离。延迟一会是让主节点把数据同步到从节点。 1.读写锁保证数据的强一致性 因为一般放…

值得推荐的5个免费 PDF 转 Word 转换器分享

最好的免费 PDF 转 Word 转换器专注于两件事:范围和速度。 大多数 PDF 转换工具不限于一种文件类型 - 它们允许您将 PDF 转换为Microsoft Word,以及转换 Excel、Powerpoint 和其他 Office 应用程序(并再次转换回来)。最好的人很快…

C语言:指针详解(3)

目录 一、字符指针 二、数组指针 1.数组指针的定义 2.数组指针的初始化 3. 二维数组传参的本质 三、函数指针 1.函数指针的创建 2.函数指针的使用 3.有趣的代码(1) 4.有趣的代码(2) 四、typedef关键字 1.typedef的使用方法 2.typedef和#define的区别 五、函数指针…

社交媒体数据恢复:新浪微博

当我们在使用新浪微博时,可能会遇到一些意外情况,如误删微博、账号出现问题等。这时,我们需要进行数据恢复。本文将详细介绍如何在新浪微博中进行数据恢复。 首先,我们需要了解新浪微博的数据恢复功能。根据微博的帮助中心&#…

【智能算法应用】麻雀搜索算法求解非线性方程组问题

目录 1.算法原理2.数学模型3.结果展示4.代码获取 1.算法原理 【智能算法】麻雀搜索算法(SSA)原理及实现 2.数学模型 非线性方程组为: 2 x 1 − x 2 e − x 1 − x 1 2 x 2 e − x 2 (1) \begin{aligned}&2x_1-x_2e^{-x_1}\\&-…
最新文章