什么是进程间通信?

17 Mar 2025 | 5 分钟阅读

一般来说,进程间通信(Inter Process Communication)是由操作系统(OS)提供的一种机制。这种机制的主要目的或目标是在多个进程之间提供通信。简而言之,进程间通信允许一个进程告知另一个进程某些事件的发生。

现在让我们看一下进程间通信的一般定义,它将解释我们上面讨论的相同内容。

定义

"进程间通信用于在一或多个进程(或程序)内的多个线程之间交换有用信息。"

为了理解进程间通信,您可以参考下图,该图说明了进程间通信的重要性。

What is Inter Process Communication

同步在进程间通信中的作用

它是进程间通信的重要组成部分。通常,这由进程间通信控制机制提供,但有时也可以由通信进程控制。

以下是用于提供同步的方法:

  1. 互斥
  2. 信号量
  3. 屏障
  4. 自旋锁

互斥:

通常需要一次只有一个进程线程可以进入临界区。这也有助于同步并创建一个稳定的状态以避免竞态条件。

信号量:

信号量是一种变量,通常用于控制多个进程对共享资源的访问。信号量进一步分为两种类型,如下所示:

  1. 二元信号量
  2. 计数信号量

屏障:

屏障通常不允许单个进程继续执行,除非所有进程都到达它。它被许多并行语言使用,并且集合例程施加屏障。

自旋锁:

顾名思义,自旋锁是一种锁。试图获取自旋锁的进程在检查锁是否可用时会等待或进入一个循环。这被称为忙等待,因为即使进程处于活动状态,它也不会执行任何功能操作(或任务)。

进程间通信的方法

现在我们将讨论一些不同的进程间通信方法,如下所示:

What is Inter Process Communication

以下是进程间通信的一些不同方法:

  1. 管道
  2. 共享内存
  3. 消息队列
  4. 直接通信
  5. 间接通信
  6. 消息传递
  7. FIFO

为了更详细地了解它们,我们将逐个讨论。

管道:

管道是一种单向数据通道。这意味着数据在这个数据通道中一次只能沿一个方向移动。但是,可以为此类型使用两个通道,以便能够将数据发送到另一个进程并从另一个进程接收数据。通常,它使用标准输入输出方法。这些管道用于所有类型的 POSIX 系统以及不同版本的 Windows 操作系统。

共享内存:

它可以被视为一种可以被多个进程同时使用或访问的内存。它主要用于进程之间进行通信。因此,几乎所有的 POSIX 和 Windows 操作系统也都使用共享内存。

消息队列:

一般来说,消息队列允许读写不同的消息。在消息队列中,消息会一直存储在队列中,直到接收者检索它们。简而言之,我们也可以说消息队列在进程间通信中非常有帮助,并且被所有操作系统使用。

为了更详细地理解消息队列和共享内存的概念,让我们看看下面给出的图。

What is Inter Process Communication

消息传递:

这是一种允许进程相互同步和通信的机制。但是,通过使用消息传递,进程可以在不恢复共享变量的情况下进行通信。

通常,进程间通信机制提供两种操作,如下所示:

  • 发送(消息)
  • 接收(消息)

注意:消息的大小可以是固定的,也可以是可变的。

直接通信:

在这种类型的通信过程中,通常会在两个通信进程之间创建一个或建立一个链接。然而,在每一对通信进程中,只能存在一个链接。

间接通信

当进程共享一个公共邮箱时,才能存在或建立间接通信,并且这些进程中的每一对进程共享多个通信链接。这些共享链接可以是单向的或双向的。

FIFO:

这是一种用于两个不相关进程之间进行通用通信的类型。它也可以被认为是全双工的,这意味着一个进程可以与另一个进程通信,反之亦然。

其他一些不同的方法

  • 套接字:

它充当网络中用于接收或发送数据的终结点。它适用于在同一台计算机上的进程之间发送数据,或在同一网络上的不同计算机之间发送数据。因此,它被多种操作系统使用。

  • 文件:

文件是存储在磁盘上的数据记录或文档,并且可以按需由文件服务器获取。另一个最重要的事情是,多个进程可以根据需要访问该文件。

  • 信号:

顾名思义,它们是在进程间通信中使用的一种信号,使用方式非常有限。通常,它们是由一个进程发送到另一个进程的系统消息。因此,它们不用于发送数据,而是用于多个进程之间的远程命令。

通常,它们不用于发送数据,而是用于多个进程之间的远程命令。

为什么我们需要进程间通信?

有许多使用进程间通信共享数据的原因。以下是一些最重要的原因:

  • 有助于加快模块化
  • 计算
  • 权限分离
  • 便利性
  • 帮助操作系统相互通信并同步它们的行为。

注意:IPC 不能被视为所有问题的解决方案,但重要的是它能很好地完成它的工作。