『Linux笔记』进程间通信(IPC)详细介绍!
| 进程间通信(IPC)详细介绍! |
文章目录
- 一. 进程间通信(IPC)详细介绍
- 1. 共享内存(Shared Memory)
- 2. 消息队列(Message Queues)
- 3. 信号量(Semaphores)
- 4. 管道(Pipes)
- 5. 套接字(Sockets)
- Docker 中的 IPC
- 总结
一. 进程间通信(IPC)详细介绍
进程间通信(Inter-Process Communication, IPC) 是操作系统提供的一种机制,旨在解决多个进程之间如何交换数据和进行协作的问题。 它在 并发程序设计 中至关重要,尤其是在多核处理器上,可以有效提升资源利用率,减少处理器等待时间,提供更高效的执行方式。
IPC 的核心目标是允许进程在不同的执行环境中(比如不同的内存空间)共享数据和状态信息。常见的 IPC 机制有以下几种:

1. 共享内存(Shared Memory)
共享内存是最直接的一种进程间通信方式,允许多个进程访问同一块内存区域。共享内存提供了一种非常高效的方式来交换大量数据,因为进程不需要进行复杂的拷贝操作。
-
工作原理:操作系统为多个进程提供一块共同访问的内存区域,进程通过读取和写入这块内存来交换数据。共享内存本身并不提供同步机制,因此使用时需要配合其他同步机制(如信号量)来避免数据冲突。
-
示例:
假设有一个进程 A 负责生成数据,另一个进程 B 负责处理数据。可以使用共享内存让这两个进程交换信息。- 进程 A 将数据写入共享内存。
- 进程 B 从共享内存中读取数据进行处理。
共享内存的一个实际应用是数据库缓存,当多个数据库进程需要频繁访问相同的数据时,使用共享内存可以极大提高数据访问效率。
2. 消息队列(Message Queues)
消息队列是通过一个由操作系统提供的队列机制,让进程能够以消息的形式传递数据。消息队列是一种顺序传递机制,进程发送消息时,消息被加入到队列中,接收进程可以从队列中按顺序读取消息。
-
工作原理:每个消息队列都有一个标识符,进程通过向队列发送消息或从队列中接收消息来实现通信。消息可以是不同类型的数据,队列保证消息的顺序。
-
示例:
- 生产者进程 A 生成数据,并将数据打包为消息发送到消息队列。
- 消费者进程 B 从消息队列中获取并处理这些消息。
消息队列适合于松耦合的进程通信,能够有效处理不同进程间的异步数据交换。
3. 信号量(Semaphores)
信号量用于控制多个进程对共享资源的访问。它通常用于实现进程间的同步,防止多个进程同时访问某一共享资源,从而避免产生竞态条件。
-
工作原理:信号量是一个整数值,表示资源的数量。信号量提供了两个操作:
- P(Wait)操作:将信号量的值减1,若信号量的值为0,则进程阻塞,直到信号量值大于0。
- V(Signal)操作:将信号量的值加1,唤醒等待的进程。
-
示例:
设想有两个进程,进程 A 和进程 B,它们都需要访问共享资源 R。为了防止同时访问,使用信号量来进行同步。- 进程 A 执行 P 操作,等待信号量为正值。
- 进程 B 在操作共享资源 R 时,执行 V 操作,释放资源并增加信号量值。
信号量常用于避免死锁和确保多个进程之间的同步执行。
4. 管道(Pipes)
管道是一种常用的单向通信机制,通常用于父进程和子进程之间的通信。管道将数据从一个进程流向另一个进程,且管道通常是无名的,只能在创建管道的进程之间传输数据。
-
工作原理:管道通过操作系统内核创建一个缓冲区,数据通过该缓冲区从一个进程流向另一个进程。管道通常用于标准输入输出操作,例如 UNIX 系统中的
|符号,允许一个进程的输出成为另一个进程的输入。 -
示例:
在 Linux 中,ps命令输出当前进程信息,而grep命令可以用来筛选进程信息。通过管道,将ps的输出传递给grep:ps aux | grep 'python'
这是一种典型的管道通信,通过管道,ps 的输出直接传递给 grep 进行过滤。
5. 套接字(Sockets)
套接字是一种更为通用的进程间通信机制,它不仅支持同一台机器上的进程间通信,还支持不同机器之间的网络通信。套接字广泛应用于客户端与服务器之间的数据交换。
-
工作原理:进程通过套接字进行连接和数据交换,套接字支持全双工通信,即可以同时进行发送和接收。套接字通常基于 TCP/IP 协议工作。
-
示例:
- 客户端-服务器通信:一个进程作为服务器,监听某个端口,等待客户端请求;另一个进程作为客户端,向服务器发送请求并接收响应。
例如,Web 服务器和浏览器之间的通信就是基于套接字进行的,通过 HTTP 协议发送请求和响应数据。
Docker 中的 IPC
在 Docker 中,每个容器都有独立的 IPC 命名空间,这意味着容器内的进程不能直接与主机或其他容器的进程进行通信。为了让容器与主机或其他容器共享 IPC 资源,可以使用 --ipc 选项进行配置:
-
--ipc=host:容器将共享主机的 IPC 命名空间。进程可以通过共享内存、信号量等机制与主机上的其他进程通信。 -
--ipc=container:<container_id>:容器将共享指定容器的 IPC 命名空间,使得它们可以相互通信。
例如,在使用多个容器进行高性能计算时,可以共享 IPC 命名空间,使得这些容器之间能够通过共享内存进行数据交换,提升性能。
总结
进程间通信(IPC)是多进程系统中不可或缺的一部分,常见的机制包括共享内存、消息队列、信号量、管道和套接字。每种机制适用于不同的场景,进程根据实际需求选择合适的 IPC 方法。在 Docker 等容器化环境中,理解和配置 IPC 选项对于实现高效的进程间协作至关重要。
相关文章:
『Linux笔记』进程间通信(IPC)详细介绍!
进程间通信(IPC)详细介绍! 文章目录 一. 进程间通信(IPC)详细介绍1. 共享内存(Shared Memory)2. 消息队列(Message Queues)3. 信号量(Semaphores)…...
Jmeter进阶篇(34)如何解决jmeter.save.saveservice.timestamp_format=ms报错?
问题描述 今天使用Jmeter完成压测执行,然后使用命令将jtl文件转换成html报告时,遇到了报错! 大致就是说jmeter里定义了一个jmeter.save.saveservice.timestamp_format=ms的时间格式,但是jtl文件中的时间格式不是标准的这个ms格式,导致无法正常解析。对于这个问题,有如下…...
Visual Studio 2022配置网址参考
代码格式化和清理冗余代码选项的配置: 代码样式选项和代码清理 - Visual Studio (Windows) | Microsoft Learn 调试时传递参数: 调试时传递命令行参数(C) - Visual Studio (Windows) | Microsoft Learn...
Redis中集合(Set)常见命令详解
集合(Set)常见命令详解 集合(Set)在Redis中是一种无序且不可重复的数据结构,非常适合用于存储唯一元素的集合。以下是Redis集合操作的一些常用命令及其详细说明: 添加成员 sadd key member [member ...]…...
动态规划
简介 动态规划最核心两步: 状态表示:dp[i]代表什么状态转移方程:如何利用已有的dp求解dp[i] 只要这两步搞对了, 就完成了动态规划的%95 剩下的就是细节问题: dp初始化顺序(有时是倒序)处理边…...
stm32rtc实时时钟详解文章
目录 stm32 后备区域基础知识详解 stm32 bkp基础知识详解 Unix时间戳基础知识详解 stm32 rtc实时时钟基础知识详解 相关代码初始化配置 欢迎指正,希望对你,有所帮助!!! stm32 后备区域基础知识详解 stm32芯片的 …...
DeepSeek 助力 Vue 开发:打造丝滑的 键盘快捷键(Keyboard Shortcuts)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
【第一节】C++设计模式(创建型模式)-工厂模式
目录 前言 一、面向对象的两类对象创建问题 二、解决问题 三、工厂模式代码示例 四、工厂模式的核心功能 五、工厂模式的应用场景 六、工厂模式的实现与结构 七、工厂模式的优缺点 八、工厂模式的扩展与优化 九、总结 前言 在面向对象系统设计中,开发者常…...
深入理解 SQL 注入漏洞及解决方案
一、引言 在当今数字化时代,数据库作为存储和管理数据的核心组件,其安全性至关重要。SQL 注入是一种常见且极具威胁性的数据库安全漏洞,它可能导致数据泄露、篡改甚至系统被完全控制。本文将深入探讨 SQL 注入漏洞的产生原因、表现形式以及如…...
使用 deepseek实现 go语言,读取文本文件的功能,要求支持 ascii,utf-8 等多种格式自适应
使用 deepseek实现 go语言,读取文本文件的功能,要求支持 ascii,utf-8 等多种格式自适应我要用 chatgpt,也问过,但是比 deepseek 还是差一个级别,具体如下: package mainimport ("bufio&qu…...
7.【线性代数】——求解Ax=0,主列和自由列
七 求解Ax0,主列和自由列 1. 消元、秩、特解特解零空间 2. 简化行阶梯形式 :主元上下都是0,主元简化为1 1. 消元、秩、特解 矩阵消元 [ 1 2 2 2 2 4 6 8 3 6 8 10 ] ⏟ A ⇒ r o w 2 − 2 r o w 1 , r o w 3 − 3 r o w 1 [ 1 2 2 2 0 0 2 4 0 0 2 4 ]…...
vue3结合后端传递过来的文件进行预览功能
业务的需要,前端需要根据后端传递过来的文件流进行预览的功能,前端点击链接直接触发浏览器的窗口的预览功能。 实现方式一: 使用弹窗和iframe的标签的形式进行预览文件,但是iframe可能会出现网站安全性的问题,限制比较…...
【Python爬虫(39)】掌控全局:分布式爬虫的任务管理与监控之道
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
Jenkins整合Jmeter实现接口自动化测试
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、安装jmeter 下载:http://jmeter.apache.org/download_jmeter.cgi 这里我用了一台Windows安装jmeter用来写接口测试的脚本,启动前修改j…...
Web 自动化测试提速利器:Aqua 的 Web Inspector (检查器)使用详解
Web 自动化测试提速利器:Aqua 的 Web Inspector (检查器)使用详解 前言简介一、安装二、Web Inspector 的使用2.1 获取元素定位器(Locators)2.2 将定位器添加到代码2.3 验证定位器2.4 处理 Frames (框架)总结前言 JetBrains 的 Aqua IDE 提供强大的 Web Inspector 工具,帮…...
大语言模型:从开发到运行的深度解构
一、LLM开发训练的全流程解析 1. 数据工程的炼金术 数据采集:构建涵盖网页文本(Common Crawl)、书籍、论文、代码等领域的超大规模语料库,典型规模可达数十TB。例如GPT-4的训练数据包含超过13万亿token数据清洗:通过…...
【GoLang】【算法模板】2、GoLang 算法模板整理
文章目录 0、前言1、GoLang 算法必会技巧1.1、标准库1.1.1、sort 包1.1.2、slice 包 1.2、数据结构1.2.1、优先队列 2、板子2.1、二分2.1.1、lower_bound、upper_bound 2.2、字符串2.2.1、kmp 0、前言 整理一下 golang 的算法板子,作为备忘录使用。可能有些板子、博…...
合理建模--最短路径
这道题目难就难在如何想到用最短路径来做 主要是这个题目不能用bfs来写,因为距离并不是1 狄克斯特拉算法很久没写了,有些地方生疏了 且这个题目需要记录三个信息,得用tuple 题目地址 int dx[] {0,0,1,-1};int dy[] {1,-1,0,0}; class Solut…...
喜报!博睿数据案例获经观传媒“2024年度数字转型创新案例”!
本文已在“经观”APP中发表,点击下方文章链接查看原文: 2024科技创变纪:创新破局 变量启新 近日,经济观察报“2024年度卓越创新实践案例”榜单评选结果正式公布。博睿数据选送的案例“从零到一:可观测体系建设的探索…...
基于图扑 HT 可视化技术打造智慧地下采矿可视化方案
在前端开发领域,不断涌现的新技术为各行业带来了创新变革的可能。今天,让我们聚焦于图扑软件自研的 HT for Web 产品,看看它如何在前端 2D、3D 渲染方面发力,为智慧地下采矿可视化打造令人惊叹的解决方案,为开发者开启…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
