当前位置: 首页 > news >正文

『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)详细介绍!

进程间通信&#xff08;IPC&#xff09;详细介绍&#xff01; 文章目录 一. 进程间通信&#xff08;IPC&#xff09;详细介绍1. 共享内存&#xff08;Shared Memory&#xff09;2. 消息队列&#xff08;Message Queues&#xff09;3. 信号量&#xff08;Semaphores&#xff09…...

Jmeter进阶篇(34)如何解决jmeter.save.saveservice.timestamp_format=ms报错?

问题描述 今天使用Jmeter完成压测执行,然后使用命令将jtl文件转换成html报告时,遇到了报错! 大致就是说jmeter里定义了一个jmeter.save.saveservice.timestamp_format=ms的时间格式,但是jtl文件中的时间格式不是标准的这个ms格式,导致无法正常解析。对于这个问题,有如下…...

Visual Studio 2022配置网址参考

代码格式化和清理冗余代码选项的配置&#xff1a; 代码样式选项和代码清理 - Visual Studio (Windows) | Microsoft Learn 调试时传递参数&#xff1a; 调试时传递命令行参数&#xff08;C&#xff09; - Visual Studio (Windows) | Microsoft Learn...

Redis中集合(Set)常见命令详解

集合&#xff08;Set&#xff09;常见命令详解 集合&#xff08;Set&#xff09;在Redis中是一种无序且不可重复的数据结构&#xff0c;非常适合用于存储唯一元素的集合。以下是Redis集合操作的一些常用命令及其详细说明&#xff1a; 添加成员 sadd key member [member ...]…...

动态规划

简介 动态规划最核心两步&#xff1a; 状态表示&#xff1a;dp[i]代表什么状态转移方程&#xff1a;如何利用已有的dp求解dp[i] 只要这两步搞对了&#xff0c; 就完成了动态规划的%95 剩下的就是细节问题&#xff1a; dp初始化顺序&#xff08;有时是倒序&#xff09;处理边…...

stm32rtc实时时钟详解文章

目录 stm32 后备区域基础知识详解 stm32 bkp基础知识详解 Unix时间戳基础知识详解 stm32 rtc实时时钟基础知识详解 相关代码初始化配置 欢迎指正&#xff0c;希望对你&#xff0c;有所帮助&#xff01;&#xff01;&#xff01; stm32 后备区域基础知识详解 stm32芯片的 …...

DeepSeek 助力 Vue 开发:打造丝滑的 键盘快捷键(Keyboard Shortcuts)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

【第一节】C++设计模式(创建型模式)-工厂模式

目录 前言 一、面向对象的两类对象创建问题 二、解决问题 三、工厂模式代码示例 四、工厂模式的核心功能 五、工厂模式的应用场景 六、工厂模式的实现与结构 七、工厂模式的优缺点 八、工厂模式的扩展与优化 九、总结 前言 在面向对象系统设计中&#xff0c;开发者常…...

深入理解 SQL 注入漏洞及解决方案

一、引言 在当今数字化时代&#xff0c;数据库作为存储和管理数据的核心组件&#xff0c;其安全性至关重要。SQL 注入是一种常见且极具威胁性的数据库安全漏洞&#xff0c;它可能导致数据泄露、篡改甚至系统被完全控制。本文将深入探讨 SQL 注入漏洞的产生原因、表现形式以及如…...

使用 deepseek实现 go语言,读取文本文件的功能,要求支持 ascii,utf-8 等多种格式自适应

使用 deepseek实现 go语言&#xff0c;读取文本文件的功能&#xff0c;要求支持 ascii&#xff0c;utf-8 等多种格式自适应我要用 chatgpt&#xff0c;也问过&#xff0c;但是比 deepseek 还是差一个级别&#xff0c;具体如下&#xff1a; package mainimport ("bufio&qu…...

7.【线性代数】——求解Ax=0,主列和自由列

七 求解Ax0&#xff0c;主列和自由列 1. 消元、秩、特解特解零空间 2. 简化行阶梯形式 :主元上下都是0&#xff0c;主元简化为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结合后端传递过来的文件进行预览功能

业务的需要&#xff0c;前端需要根据后端传递过来的文件流进行预览的功能&#xff0c;前端点击链接直接触发浏览器的窗口的预览功能。 实现方式一&#xff1a; 使用弹窗和iframe的标签的形式进行预览文件&#xff0c;但是iframe可能会出现网站安全性的问题&#xff0c;限制比较…...

【Python爬虫(39)】掌控全局:分布式爬虫的任务管理与监控之道

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…...

Jenkins整合Jmeter实现接口自动化测试

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、安装jmeter 下载&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 这里我用了一台Windows安装jmeter用来写接口测试的脚本&#xff0c;启动前修改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. 数据工程的炼金术 数据采集&#xff1a;构建涵盖网页文本&#xff08;Common Crawl&#xff09;、书籍、论文、代码等领域的超大规模语料库&#xff0c;典型规模可达数十TB。例如GPT-4的训练数据包含超过13万亿token数据清洗&#xff1a;通过…...

【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 的算法板子&#xff0c;作为备忘录使用。可能有些板子、博…...

合理建模--最短路径

这道题目难就难在如何想到用最短路径来做 主要是这个题目不能用bfs来写&#xff0c;因为距离并不是1 狄克斯特拉算法很久没写了&#xff0c;有些地方生疏了 且这个题目需要记录三个信息&#xff0c;得用tuple 题目地址 int dx[] {0,0,1,-1};int dy[] {1,-1,0,0}; class Solut…...

喜报!博睿数据案例获经观传媒“2024年度数字转型创新案例”!

本文已在“经观”APP中发表&#xff0c;点击下方文章链接查看原文&#xff1a; 2024科技创变纪&#xff1a;创新破局 变量启新 近日&#xff0c;经济观察报“2024年度卓越创新实践案例”榜单评选结果正式公布。博睿数据选送的案例“从零到一&#xff1a;可观测体系建设的探索…...

基于图扑 HT 可视化技术打造智慧地下采矿可视化方案

在前端开发领域&#xff0c;不断涌现的新技术为各行业带来了创新变革的可能。今天&#xff0c;让我们聚焦于图扑软件自研的 HT for Web 产品&#xff0c;看看它如何在前端 2D、3D 渲染方面发力&#xff0c;为智慧地下采矿可视化打造令人惊叹的解决方案&#xff0c;为开发者开启…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...