Linnux IPC通信和RPC通信实现的方式

一、基础知识

1、IPC 简介

进程间通信(IPC,Inter-Process Communication)是一组编程接口,它允许程序员协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。

2、RPC 简介

远程过程调用(RPC,Remote Procedure Call),广泛用于 Linux 的系统服务(如 NFS、NIS 等)。它的核心是让本地进程能像调用本地函数一样,调用远程主机上的函数,用于跨主机(或不同地址空间)的进程间通信。

二、实现方式

1、IPC 实现方式

  • 管道(PIPE):一对一的单向传输。

    无名管道:是UNIX系统IPC最古老的形式,它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端,只能用于具有亲缘关系的进程之间的通信(如父子进程或兄弟进程之间)。

    命名管道(FIFO):可以在无关的进程之间交换数据,与无名管道不同,FIFO有路径名与之相关联,以一种特殊设备文件形式存在于文件系统中。

  • 信号量(Semaphore):是一个计数器,用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。信号量基于操作系统的PV操作,程序对信号量的操作都是原子操作。

  • 共享内存(Shared Memory):指两个或多个进程共享一个给定的存储区,这是最快的一种IPC方式,因为进程是直接对内存进行存取。由于多个进程可以同时操作共享内存,因此需要进行同步,通常结合信号量使用。

  • 套接字(socket): 同一台主机上,可以通过 套接字文件【ip:port】 来实现双工通信。

  • 消息队列:消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识,消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。消息队列独立于发送与接收进程,进程终止时,消息队列及其内容并不会被删除。

2、RPC 实现方式

  • 过程寻址(Procedure Addressing):远程调用涉及的函数(过程)需要通过特定机制唯一标识,确保客户端能准确定位并调用目标过程。

  • 序列化(Serialization):调用的参数与返回值需在客户端与服务器间传输,因此需要转换为可跨网络传输的格式。

  • 传输(Transport):序列化后的数据通过网络协议发送至服务器,常用协议包括 TCP/IP、HTTP 等。

  • 反序列化(Deserialization):服务器接收数据后执行反序列化,将其还原为可直接处理的对象或数据结构。

三、核心区别

维度 IPC RPC
使用场景 同一主机内的进程间通信 跨主机的进程间通信
核心目标 数据叫唤 远程函数调用透明
依赖 内核机制(管道、共享内存等) 网络协议和序列化/反序列化
相关推荐
LayZhangStrive4 小时前
后端通识 - 远程服务调用RPC
网络·网络协议·rpc·sentinel·openfeign·远程服务调用
xfhuangfu3 天前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
一木 之林3 天前
Python.六.(一)--1.标准库、常用工具与基础操作(进阶)
python·rpc·dubbo
qianyuqiye14 天前
NFS 网络文件系统完整实战|原理 + RPC 架构 + 多 Web 集群共享存储
运维·网络·安全·rpc·架构·php
小小龙学IT5 天前
gRPC 开源高性能 RPC 框架深度解析:从 HTTP/2 到跨语言微服务实战
http·rpc·开源
IKUN家族6 天前
Spring IoC&DI
java·spring·rpc
snow@li7 天前
SpringBoot:全套生命周期全景详解/应用级+Bean级
java·spring boot·rpc
老虎海子11 天前
Dockerfile 零基础:指令详解 + Compose 对比 + 前端镜像实战
开发语言·前端·docker·rpc
夏天测11 天前
Python 网络编程从 TCP 三次握手到 Socket 搭建极简 AI 推理服务端(零基础可跑通完整代码)
python·socket·网络通信·tcp 网络编程·零基础网络编程
snow@li11 天前
SpringBoot:依赖注入(DI)全景深度梳理与实战分析/@Autowired、@Resource、@Qualifier
java·spring boot·rpc