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++)

相关推荐
杰克崔2 小时前
localtime接口与localtime_r接口
linux·运维·服务器·车载系统
汽车通信软件大头兵2 小时前
汽车MCU 信息安全--数字证书
服务器·https·ssl
以为不会掉头发的詹同学2 小时前
【TCP通讯加密】TLS/SSL 证书生成、自签名证书、请求 CA 签发证书以及使用 Python TCP 服务器与客户端进行加密通讯
服务器·python·tcp/ip·ssl
阿沁QWQ2 小时前
windows连接服务器免密
运维·服务器
代码游侠2 小时前
学习笔记——数据封包拆包与协议
linux·运维·开发语言·网络·笔记·学习
开开心心_Every2 小时前
定时管理进程:防止沉迷电脑的软件推荐
xml·java·运维·服务器·网络·数据库·excel
云霄IT2 小时前
ssh使用代理连接服务器:基本用法使用ncat
运维·服务器·ssh
FIT2CLOUD飞致云2 小时前
支持IP证书签发、数据库TCP代理,1Panel v2.0.16版本正式发布
linux·运维·服务器·开源·1panel·ip证书
Q741_1472 小时前
Linux UDP 服务端 实战思路 C++ 套接字 源码包含客户端与服务端 游戏服务端开发基础
linux·服务器·c++·游戏·udp