目 录CONTENT

文章目录

IPC & RPC

TalentQ
2025-09-11 / 0 评论 / 0 点赞 / 5 阅读 / 0 字

IPC 和 RPC 是不同层面的通信概念。IPC 解决的是本地多进程如何协作通信的问题,是操作系统提供的基础机制,比如管道、消息队列和最快的共享内存。而 RPC 解决的是分布式系统下如何透明地调用远程服务的问题,它是一种高层设计模式,通常需要序列化、网络传输等服务发现等组件支持。

RPC 的目标是让开发者感觉像调用本地函数一样简单,但其内部复杂得多,需要处理网络的各种不确定性。虽然它们的目标不同,但在某些场景下也有交集,例如,我们可以使用一种高效的 IPC(如 Unix Domain Socket)作为同一台机器上两个服务之间进行 RPC 通信的传输层,以提升性能。

IPC (Inter-Process Communication, 进程间通信)

指的是在同一台机器上运行的多个进程之间交换数据或信号的机制。它解决的是本地多进程协作的问题。

常见技术方式:

  1. 管道 (Pipe) / 命名管道 (Named Pipe, FIFO)

    • 管道:单向通信,用于有亲缘关系的进程(如父子进程)。

    • 命名管道:有名字的管道,可用于无亲缘关系的进程。

  2. 信号 (Signal)

    • 用于异步通知进程某个事件已发生(如 SIGKILL, SIGINT)。处理简单,但携带的信息量少。

  3. 消息队列 (Message Queue)

    • 消息的链表,存储在内核中。进程可以放入或取出消息。克服了管道字节流模型的缺点。

  4. 共享内存 (Shared Memory)

    • 最快的 IPC 方式。多个进程将同一块物理内存映射到自己的虚拟地址空间,从而直接读写。需要配合信号量互斥锁等同步机制来避免数据竞争。

  5. 信号量 (Semaphore) & 互斥锁 (Mutex)

    • 主要用于进程间的同步,控制对共享资源的访问,而不是直接用于传递数据。常作为共享内存的配套技术。

  6. 套接字 (Socket)

    • 虽然 Socket 最常用于网络通信,但也有本地套接字 (Unix Domain Socket),用于同一台主机上的进程间通信,效率比网络套接字高。

RPC (Remote Procedure Call, 远程过程调用)

是一种跨网络的通信机制,它允许一台机器上的程序调用另一台机器上的子程序(或服务),就像调用本地方法一样,对开发者屏蔽了底层的网络复杂性。它解决的是分布式系统间调用的问题。

一个 RPC 调用主要经历以下流程,其核心目标是让客户端像调用本地函数一样调用远程服务:

常见 RPC 框架:

  • gRPC (Google):基于 HTTP/2 和 protobuf,高性能,跨语言。

  • Apache Thrift (Facebook):跨语言,功能全面。

  • Dubbo (阿里巴巴):Java 生态的高性能 RPC 框架。

  • .brpc (百度):C++ 生态的高性能 RPC 框架。

0

评论区