Hii,
我在最近的一次采访中被问到这个问题我没有回答,因为我对IPC比较新。
如果流程在不同的系统上,您将如何使用IPC?
答案 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是进程间通信,更多是一种在一台机器中的之间共享数据的技术,其方式是数据传递会绑定不同进程的耦合。
有一些复杂情况,比如如果一个进程用一种语言编写,另一个进程写在另一个进程中,如何保证数据流与每个进程读取兼容,你可以使用Google的Protocol Buffer来处理this,有一个.NET版本,here。
虽然在不同程度上,IPC机制只是透明的,并且在一个域内工作,例如Windows到Windows,Linux到Linux,你可能能够用Windows到Linux反之亦然,但必须注意谨慎,因为API差异和功能决定了数据传输编码方案协议的结果。