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
使用场景 同一主机内的进程间通信 跨主机的进程间通信
核心目标 数据叫唤 远程函数调用透明
依赖 内核机制(管道、共享内存等) 网络协议和序列化/反序列化
相关推荐
helloworld工程师13 小时前
Dubbo应用开发之RPC直连开发
网络协议·rpc·dubbo
fqbqrr13 小时前
2510C++,rest_rpc
c++·rpc
poemyang1 天前
jemalloc思想的极致演绎:深度解构Netty内存池的精妙设计与实现
rpc·netty
一个龙的传说2 天前
springboot优雅停止的流程梳理
java·spring boot·rpc
poemyang2 天前
“化零为整”的智慧:内存池如何绕过系统调用和GC,构建性能的护城河
rpc·netty
扁豆的主人2 天前
RPC服务
网络·网络协议·rpc
静若繁花_jingjing3 天前
面试_项目问题_RPC调用异常
网络·网络协议·rpc
poemyang3 天前
职责分离的艺术:剖析主从Reactor模型如何实现极致的并发性能
rpc·reactor·事件驱动
草莓熊Lotso4 天前
基于容器适配器模式的 Stack 与 Queue 实现:复用底层容器的优雅设计
c++·网络协议·rpc·适配器模式
poemyang4 天前
从C10K到Reactor:事件驱动,如何重塑高并发服务器的网络架构
rpc·reactor·事件驱动