将IPC用于不同的系统

时间:2010-09-18 15:56:44

标签: ipc

Hii,

我在最近的一次采访中被问到这个问题我没有回答,因为我对IPC比较新。

如果流程在不同的系统上,您将如何使用IPC?

3 个答案:

答案 0 :(得分:3)

IPC只是指进程间通信。流程有很多种方式可以进行通信,如果两个进程在同一台机器上是本地的,那么确实没有区别。

如果您在跨机器进行通话,则无法使用某些表单,例如共享内存,信号,管道,内存映射文件或信号量。 (如果你真的想要去那条路线,有中间件可以模拟共享内存)。

一些比较常见的方法是:

文件大多数操作系统 信号大多数操作系统;某些系统(如Windows)仅在C运行时库中实现信号,实际上并不支持将其用作IPC技术。
套接字大多数操作系统 消息队列大多数操作系统 管道所有POSIX系统,Windows 命名管道所有POSIX系统,Windows 信号量所有POSIX系统,Windows 共享内存所有POSIX系统,Windows 消息传递 (无共享)用于MPI范例,Java RMI,CORBA,MSMQ,MailSlots等。
内存映射文件所有POSIX系统,Windows。如果使用临时文件,此技术可能会带来竞争条件风险。

修改:此列表取自Wikipedia。这个清单和其他清单一样好。

答案 1 :(得分:0)

IPC是一个抽象术语,表示驻留在相同或不同系统上的进程之间的任何进程间通信。

如果您在不同系统上有进程,最明显的是基于TCP的通信,包括使用TCP作为传输的IPC工具。但当然,这不是交换信息的唯一方式。

答案 2 :(得分:0)

IPC是进程间通信,更多是一种在一台机器中的之间共享数据的技术,其方式是数据传递会绑定不同进程的耦合。

  • 第一种是使用内存映射技术,其中创建了内存映射,而其他人打开内存映射进行读/写...
  • 第二个是,使用套接字,彼此通信......这有很高的开销,因为每个进程都必须打开套接字,进行通信......虽然有效
  • 第三,是使用管道或命名管道,可以找到一个很好的例子here

有一些复杂情况,比如如果一个进程用一种语言编写,另一个进程写在另一个进程中,如何保证数据流与每个进程读取兼容,你可以使用Google的Protocol Buffer来处理this,有一个.NET版本,here

虽然在不同程度上,IPC机制只是透明的,并且在一个域内工作,例如Windows到Windows,Linux到Linux,你可能能够用Windows到Linux反之亦然,但必须注意谨慎,因为API差异和功能决定了数据传输编码方案协议的结果。