RPC和IPC有什么区别?

69

它们是同义词吗?

7个回答

90

维基百科通常对这些目的非常有帮助。

RPC:

远程过程调用(RPC)是一种进程间通信技术,允许计算机程序在另一个地址空间(通常是在共享网络上的另一台计算机上)执行子例程或过程,而无需程序员显式编码此远程交互的详细信息。

IPC:

进程间通信(IPC)是一组技术,用于在一个或多个进程中的多个线程之间交换数据。这些进程可能正在运行于连接在网络上的一台或多台计算机上。

因此,RPC只是IPC的一种。


3
谢谢您的回答。我确实查过维基百科,但我不确定它是否是这种松散定义的计算机科学术语的明确参考。 - Dimitri C.
@Dimitri:就我所知,这是一个非常明确的引用。至少我会这样使用。 - Eli Bendersky
“RPC是IPC的一种”还是“IPC是RPC的一种”?我认为应该是后者。 - Olshansky

16

14

RPC(远程过程调用)是IPC(进程间通信)的一种形式 - 后者是一个更普遍的术语,涵盖了除RPC之外的许多机制。


9

IPC是一组用于在同一台计算机或不同计算机上与两个进程通信的方法。它包括直接和间接通信,同步和异步通信以及显式缓冲。

而RPC是一种从服务器调用客户端过程并将其结果作为消息返回的方法。


5
  • 远程过程调用(在系统中远程调用方法)
  • 进程间通信(使同一系统中的进程相互交互的方法)。

2

2
回答您的问题,更好地掌握什么是IPC和RPC以及它们的工作原理和特性,这样我们就能更好地发现它们之间的区别,如果有的话。
在我的回答中,我将引用一本书,书名为“操作系统概念,第十版”,作者是Avi Silberschatz、Peter Baer Galvin和Greg Gagne,出版商是John Wiley & Sons Inc.,有关该书的更多信息,请点击此处

IPC

为什么和何时应该使用IPC?

进程分为两种:独立进程和协作进程。正如其名称所示,独立进程不与其他进程进行任何交互。但是,协作进程需要与其他进程进行通信和交互,这就是IPC出现的背景,正如我们在书中的第3.4节第123页所述:

合作进程需要一种进程间通信(IPC)机制,使它们能够交换数据,即彼此发送和接收数据。进程间通信有两个基本模型:共享内存和消息传递。
正如书中所提到的,有两种类型的通信:共享内存和消息传递。RPC使用的模型通常基于后者,因此为了更好地比较IPC和RPC,我假设两者都使用消息传递方案。
那么什么是消息传递,它在IPC中如何工作?书中第3.6节第128页指出:
“消息传递提供了一种机制,允许进程在不共享相同地址空间的情况下进行通信和同步操作。它在分布式环境中特别有用,其中通信进程可能驻留在由网络连接的不同计算机上。”
还有:
“有几种方法可以逻辑实现链接:直接或间接通信、同步或异步通信、自动或显式缓冲区。”
因此,我们应该考虑通过消息传递尝试相互通信的进程可以在同一台或不同的机器上(并且在同一网络上)。正如@vrnithinkumar在答案中提到的那样,使用消息传递进行通信的进程之间也有许多建立逻辑链接的方法,书中也提出了这一点。但无论哪种方式,需要考虑的一点是,进程本身是主要参与发送和接收消息的,或者在这里看起来是这样。当然,操作系统(或任何其他媒介)可以提供这种通信的手段并能够控制它,但在这方面并没有引入太多的接口。

RPC

什么是RPC,何时使用它以及它如何运作?
该书将RPC定义为:

在网络上发送的过程调用,以在另一台计算机上执行;在客户端-服务器计算中常用。

此外,在第3.8.2节中:

远程服务的最常见形式之一是RPC范例,其旨在为具有网络连接的系统之间的使用抽象过程调用机制。它在许多方面类似于IPC机制,并且通常建立在这样的系统之上。
然后书中提到了IPC和RPC之间的一个特定差异:
与IPC消息相比,在RPC通信中交换的消息是结构良好的,因此不再仅仅是数据包。每个消息都被寄给监听远程系统端口的RPC守护进程,并包含标识符,指定要执行的函数及传递给该函数的参数。然后按请求执行该函数,并将任何输出发送回单独的消息给请求方。
在RPC中,使用了一个称为存根的东西,它承担了发送/接收系统中的某些重负。该书在第150页上解释了存根。
RPC系统通过在客户端提供存根来隐藏允许通信发生的细节。通常,每个独立的远程过程都有一个单独的存根存在。当客户端调用远程过程时,RPC系统调用适当的存根,并将提供给远程过程的参数传递给它。该存根定位服务器上的端口并编组参数。然后,该存根使用消息传递向服务器发送消息。服务器端的类似存根接收此消息并在服务器上调用该过程。如果必要,返回值将使用相同的技术传回客户端。

另一个需要考虑的问题是存根的操作方式,这为系统提供了一定程度的封装。

结论

现在我们对RPC和IPC有了更好的理解,让我们回答这些问题:
RPC和IPC之间有什么区别? 是的,有。
RPC和IPC之间有什么区别? 通常,RPC的目的仅是为了为调用者调用一个函数(过程)并返回包含调用该函数结果的消息。但是,IPC的目的仅是在与通信相关的进程之间交换数据。即使在像Android binder framework这样使用RPC作为IPC形式的情况下,我们可以说该模型强调封装接口(通过在此处使用单词RPC),用于进程通信。或者简单地说,它以RPC方式执行IPC(或者可以说是相反的)。
RPC和IPC是同义词吗?尽管它们具有许多相似之处和属性,但技术上的答案是否定的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接