什么是进程间通讯
进程间通信(inter-process communication或interprocess communication,简写IPC)是指两个或两个以上进程(或线程)之间进行数据或信号交互的技术方案。
通常,IPC一般包含客户端和服务器,客户端请求数据,服务器响应请求(比如分布式计算中就是这样)。
有哪些IPC方法
IPC方法适用的环境
文件(File)
存储在磁盘上的记录,或由文件服务器按需合成的记录,可以由多个进程访问。
信号(Signal)
系统消息从一个进程发送到另一个进程,一般不用于传输数据,而是用于远程传输命令。
套接字(Socket)
通过网络接口将数据量发送到本机的不同进程或远程计算机。
Unix域套接字(Unix domain socket)
用于在同一台机器上运行的进程之间的通信。虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高。UNIX域套接字仅仅复制数据;它们并不执行协议处理,不需要添加或删除网络报头,无需计算检验和,不要产生顺序号,无需发送确认报文。
消息队列(Message queue)
类似于套接字的数据流,但消息有自己的结构,它允许多个进程只需要读写消息队列,而不需要直接相互连接。
管道(Pipe)
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
命名管道(Named pipe或FIFO)
命名管道可在同一台计算机的不同进程之间或在跨越一个网络的不同计算机的不同进程之间,支持可靠的、单向或双向的数据通信。
共享内存(Shared memory)
允许多个进程访问同一个内存块,该内存块作为一个共享缓冲区,供进程间相互通信。
消息传递(Message passing)
一般在并发模型中,允许多个程序使用消息队列或者托管通道通信。
内存映射文件(Memory-mapped file)
类似于标准的文件,内存映射文件映射到RAM,可以直接对内存地址进行更改,而不是更改输出流。