Linux:简介(进程间通信一)

从现在开始,我们开始学习进程间通信,这也是一个很重要的话题,话不多说,我们正式开始~~

我们之前学过,进程是独立的,就连父进程与子进程,都是独立的,但是凡事有利有弊,进程之间不能只有独立,也应该有协作,就比方说进程A处理某个数据给进程B,进程B分析这个数据给进程C,这些进程此时不应该相互独立,而应该互相协作,那么该怎么办呢??下面为你解答!!

1.理解层面

1.为什么要进程间通信

数据传输:⼀个进程需要将它的数据发送给另⼀个进程

资源共享:多个进程之间共享同样的资源

通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它(它们)发⽣了某种事件(如进

程终⽌时要通知⽗进程)

进程控制:有些进程希望完全控制另⼀个进程的执⾏(如Debug进程),此时控制进程希望能够

拦截另⼀个进程的所有陷⼊和异常,并能够及时知道它的状态改变

举一个例子

考虑一个典型的多核处理器环境,在这个环境下,多个进程并行执行任务。如果这些进程要处理的数据量非常庞大,且每个进程只处理数据的其中一部分,那么如何让这些进程之间共享数据就变得非常关键。

场景:图像处理中的并行计算

假设我们要处理一个非常大的图像,需要进行复杂的图像滤波操作。假设有四个进程,分别处理图像的四个不同区域。每个进程会对自己的区域进行滤波处理,处理完成后,需要将处理结果汇总到一起生成最终的图像。

在这种情况下,进程间共享数据(通过IPC技术如共享内存)能够显著提高性能。每个进程不需要从磁盘中读取完整图像的每一部分,只需要处理自己负责的区域并与其他进程共享中间数据。使用共享内存机制,多个进程可以直接访问相同的内存区域,从而避免了数据复制的开销,减少了不必要的磁盘I/O操作。通过这种方式,进程间的高效数据共享能够显著提高整体图像处理速度。

2.什么是通信

进程间通信(IPC,Inter-Process Communication)指的是:不同进程之间为了交换数据、同步执行、协调资源而使用的一整套机制/技术。因为进程彼此隔离、地址空间独立,不能像同一进程里的线程那样直接共享变量,所以需要 IPC 来"搭桥"

3.怎么通信

我们先要知道通信本质是什么,后续的通信方法都离不开这个本质:

让不同的进程看到同一块资源【某种内存】,然后能进行通信!!

这个资源不可能由进程提供(就算最亲近的父子进程,也会发生写实拷贝),只能由操作系统(OS)提供->系统调用->OS的接口->设计统一的通信接口->设计出不同的通信方案

举个例子,在现实生活中,AB是两个陌生人,A与B想成为朋友,只能由C搭桥认识,不然两个人必定没有交集

注意:早期本机 IPC 各家 OS 各做各的;网络普及后,为了跨主机、跨系统互联,行业逐步形成并推广了以 TCP/IP 为代表的通用网络协议标准(以及以 socket 为代表的编程接口)

2.进程间通信的发展脉络

  • 早期(单机批处理):几乎不需要复杂 IPC,更多是"顺序执行 + 文件交换"

  • 分时/多任务出现 :进程并发增多,出现 信号 (通知)与 管道(父子进程字节流)

  • 系统化 IPC(Unix/System V 等) :为更通用场景引入 消息队列 (按消息)、共享内存 (高性能)、信号量(同步互斥)

  • 图形界面与桌面系统:更强调跨进程服务与安全隔离,出现更工程化的本机 IPC(如 Windows 的机制等)

  • 网络化/分布式时代Socket 成为事实标准,IPC 从"进程间"扩展到"主机间"

  • 服务化/云原生 :在 socket 之上封装 RPC/gRPC/HTTP ,并配合 消息中间(Kafka/RabbitMQ 等)实现解耦、可靠与可扩展

3.进程间通信分类

1.管道

匿名管道pipe
命名管道

2.System V IPC

System V 消息队列
System V 共享内存
System V 信号量

3.POSIX IPC

消息队列
共享内存
信号量
互斥量
条件变量
读写锁

本篇博客主要是简绍,我们下一篇博客将会正式开始管道学习哦~~(我们环境正式切换为ubuntu + vscode + c++)

相关推荐
wanhengidc6 小时前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
有谁看见我的剑了?7 小时前
linux 添加硬盘后系统识别不到硬盘处理
linux·运维·服务器
JoyCong19987 小时前
ToDesk远程屏幕墙技术白皮书:如何重塑全局运维视界
运维·电脑·远程工作
偶尔上线经常挺尸7 小时前
《100个“反常识”经验15:Nginx 502排查:从应用到内核》
运维·nginx·性能调优·反向代理·502错误·http排错
yc_12248 小时前
用 Visual Studio 远程调试 Linux:从零到流畅的完整指南
linux·ide·visual studio
思茂信息8 小时前
CST软件如何进行参数化扫描?
运维·开发语言·javascript·windows·ecmascript·软件工程·软件需求
计算机安禾8 小时前
【Linux从入门到精通】第31篇:防火墙漫谈——iptables与firewalld防护指南
linux·运维·php
下一页盛夏花开9 小时前
ubuntu 20中安装QT以后出现红色空心断点
linux·运维·ubuntu
金色光环9 小时前
FreeModbus释放底层的 TCP 监听端口
服务器·网络·tcp/ip
sanshanjianke9 小时前
Thunderobot 911ME 笔记本 Linux 风扇控制研究
linux