什么是进程间通信?
进程间通信是由操作系统提供的机制,允许进程之间相互通信。这种通信可能包括一个进程让另一个进程知道某个事件已发生,或者将数据从一个进程传输到另一个进程。
下图说明了进程间通信:
进程间通信中的同步
同步是进程间通信的必要部分。它要么由进程间控制机制提供,要么由通信进程处理。一些提供同步的方法如下:
- 信号量
一个信号量是一个变量,它控制多个进程对公共资源的访问。两种类型的信号量是二进制信号量和计数信号量。
- 互斥
互斥要求一次只有一个进程线程可以进入临界区。这对于同步很有用,并且还可以防止竞争条件。
- 屏障
屏障不允许单个进程继续执行,直到所有进程都到达它。许多并行语言和集体例程都使用屏障。
- 自旋锁
这是一种锁。试图获取此锁的进程会在循环中等待,同时检查锁是否可用。这被称为忙等待,因为即使进程处于活动状态,它也没有执行任何有用的操作。
进程间通信的方法
实现进程间通信的不同方法如下:
- 管道
管道是一个单向的数据通道。可以使用两个管道在两个进程之间创建双向数据通道。这使用标准输入和输出方法。管道用于所有 POSIX 系统以及 Windows 操作系统。
- 套接字
套接字是网络中发送或接收数据的端点。这对于在同一台计算机上的进程之间发送的数据或在同一网络上的不同计算机之间发送的数据都是正确的。大多数操作系统都使用套接字进行进程间通信。
- 文件
文件是可以存储在磁盘上或根据需要由文件服务器获取的数据记录。多个进程可以根据需要访问文件。所有操作系统都使用文件进行数据存储。
- 信号
信号在有限的范围内用于进程间通信。它们是从一个进程发送到另一个进程的系统消息。通常,信号不用于传输数据,而是用于进程之间的远程命令。
- 共享内存
共享内存是可以被多个进程同时访问的内存。这样做是为了使进程能够相互通信。所有 POSIX 系统以及 Windows 操作系统都使用共享内存。
- 消息队列
多个进程可以读取和写入数据到消息队列,而无需相互连接。消息存储在队列中,直到其接收者检索它们。消息队列对于进程间通信非常有用,并且大多数操作系统都使用它。
下图展示了进程间通信的消息队列和共享内存方法: