进程间通信有多种方式,经历过的有message queue,socket,share memory, signal等等。看到一位大神把维基百科直接翻译了一下,觉着有用,引用一下,备忘。
Approaches
method | desc | provided by(os/other env) |
---|---|---|
File | 存储在磁盘的记录或者是序列化到文件服务器,其可以被多个进程进行访问 | 大部分 os |
Signal(Asynchronous system Trap) | 从一个进程发送到另一个进程的系统消息,不是经常用来传递数据,而是用来远程命令合作进程? | 大部分 os |
Socket | 一个通过网络接口的数据流,要么在相同机器的不同进程,要么在网络的另外一个机器。socket典型的是基于字节流,很少保存信息边界。通过socket写的数据需要格式化来保存数据边界 | 大部分 os |
Message queue | 类似于socket,但是其经常保持消息边界。典型的通过os来实现,其允许多个进程不需要直接互相连接去读写消息队列 | 大部分 os |
pipe | 单向数据通道。数据写到管道写端,直到他被从管道读到为止。利用标准的input、output可以实现两种过程的数据流 | 所有的posix系统,Windows |
Named pipe | 用文件系统的文件实现而不是使用标准的输入输出。多进程可以将文件读成buffer来处理IPC 数据 | 所有POSIX系统,Windows,amigaOS |
Semaphore | 在共享资源时同步多进程的一个简单的结构 | 所有POSIX系统,windows,AmigaOS |
shared memory | 授权给多进程,使得他们有权利访问内存相同block的数据,这使得进程能互相通信 | 所有POSIX,Windows |
message passing | 允许多程序使用消息队列和(或者)非系统管理的通道(channels),通常是使用并发模型来进行通信 | 使用RPC,RMI,MPI,CORBAK,DDS… |
Memory-mapped file | 文件匹配到RAM可以通过改变内存地址来修改而不是输出一个流的形式。这个共享的方式和标准文件一样 | 所有POSIX系统,Windows |
还有一篇文章,可参考