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
使用场景 同一主机内的进程间通信 跨主机的进程间通信
核心目标 数据叫唤 远程函数调用透明
依赖 内核机制(管道、共享内存等) 网络协议和序列化/反序列化
相关推荐
进化中的刀盾兽19 小时前
从零实现 C++ Json-Rpc(八):补齐 detail.hpp——JSON 封装与请求 ID 生成
c++·rpc
小小龙学IT2 天前
Go 语言 gRPC(grpc-go)深度解析
rpc·架构·golang·go
acd120092 天前
RPC接口超时配置明明没问题,线上却随机超时
网络·网络协议·rpc
洋不写bug3 天前
网络编程(二)TCP回显服务器与客户端通信详解
服务器·网络·tcp/ip·tcp·网络通信·javaee·回显服务器
晚安code6 天前
RPC 到底是什么:微服务内部调用的首选,以及它藏起来的三个坑
微服务·rpc
Frank_refuel7 天前
分布式RPC框架实战(二):服务端模块划分与底层设计
分布式·网络协议·rpc
别动我齐刘海7 天前
简历技术栈全面复习总结
c++·人工智能·深度学习·学习·tcp/ip·算法·rpc
starzy19907 天前
Flink Rpc通信源码级详解:从RpcService到动态代理的完整调用链路
大数据·rpc·flink
天天喝旺仔10 天前
gRPC 底层原理:HTTP/2 多路复用、Protobuf 序列化与四种流模式
分布式·http·微服务·rpc
呆萌的代Ma11 天前
gRPC微服务搭建(学习阶段1:极简服务端&客户端)
rpc·grpc