常见:
- 管道 (Pipe):
- 无名管道(匿名管道):主要用于有亲缘关系的进程之间的通信(例如,父子进程)。数据是单向流动的。
- 命名管道(FIFO):允许无亲缘关系的进程之间通信,它在文件系统中有一个名字。
- 信号 (Signal):一种用于通知接收进程某个事件已经发生的简单机制。
- 消息队列 (Message Queue):允许一个或多个进程向另一个进程发送格式化的数据块。数据块在消息队列中按照一定的顺序排列。
- 共享内存 (Shared Memory):让多个进程共享一个给定的存储区,是最快的IPC方式,因为数据不需要在进程间复制。
- 信号量 (Semaphore):主要用于同步进程间的操作,而不是传递数据,但通过控制资源的访问,它可以作为通信的一种手段。
- 套接字 (Socket):提供网络通信的机制,可用于不同机器上的进程间通信,也可以在同一台机器上的进程之间进行通信。
拓展:
- 文件系统:进程可以通过读写文件来交换信息,虽然这不是最高效的IPC方式,但它的使用非常简单且不受平台限制。
- 共享文件和映射内存 (Memory-mapped file):通过将磁盘上的文件映射到进程的地址空间,多个进程可以访问文件内容,就好像它们在操作共享内存一样。
- 远程过程调用 (RPC):允许一个程序调用另一台计算机上的程序,就像调用本地程序一样。
- 消息传递接口 (MPI):常用于高性能计算中,提供了一组标准化的通信协议,用于不同进程(可能在不同的物理机器上)的通信。
- 本地过程调用 (LPC):在同一台计算机上运行的进程间的通信机制,通常比远程过程调用(RPC)更快。
- Domain Sockets:类似于网络套接字,但仅限于同一台计算机上的进程间通信,不通过网络层传输数据。