IPC与RPC通信的实现方式
一、IPC实现方式
1.管道(PIPE):一对一的单向传输
无名管道:是UNIX系统IPC最古老的形式,它是半双工的(即数据只能在一个方向上流动),具有固定的
读端和写端,只能用于具有亲缘关系的进程之间的通信(如父子进程或兄弟进程之间)。
命名管道(FIFO):可以在无关的进程之间交换数据,与无名管道不同,FIFO有路径名与之相关联,以
一种特殊设备文件形式存在于文件系统中。
2.信号量(Semaphore):
是一个计数器,用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。信号量基于操作系统的
PV操作,程序对信号量的操作都是原子操作。
3.共享内存(Shared Memory):
指两个或多个进程共享一个给定的存储区,这是最快的一种IPC方式,因为进程是直接对内存进行存取。
由于多个进程可以同时操作共享内存,因此需要进行同步,通常结合信号量使用。
4.套接字: socket
同一台主机上,可以通过 套接字文件【ip:port】 来实现双工通信。
消息队列:
是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识,消息队列是面向记录
的,其中的消息具有特定的格式以及特定的优先级。消息队列独立于发送与接收进程,进程终止时,消息队列及
其内容并不会被删除。
5.消息队列:
是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识,消息队列是面向记录
的,其中的消息具有特定的格式以及特定的优先级。消息队列独立于发送与接收进程,进程终止时,消息队列及
其内容并不会被删除。
二、RPC实现方式
1.基于 TCP 的原生 RPC(自定义协议):
“为高性能量身定制的专线通信”,核心目标是低延迟、高吞吐,适合对性能敏感的场景(比如高频交易、游戏服务器间交互)。
2.基于 HTTP 的 RESTful RPC(伪 RPC):追求 “简单” 和 “通用”:
“用浏览器访问网页的逻辑来调用远程函数”,本质是HTTP API 调用,但通过框架封装后,体验上接近 RPC(不用手动拼 HTTP 请求)。
3.基于消息队列的 “异步 RPC”:追求 “解耦” 和 “抗造”:
“用‘快递柜’传递消息”,调用方和服务方不直接通信,而是通过 “消息队列”(比如 Kafka、RabbitMQ)中转消息