我应该在哪个时刻使用哪种进程间通信(ipc)机制?

时间:2016-10-12 18:33:13

标签: sockets process pipe ipc message

我知道有几种进程间通信方法(ipc),例如:

  • 文件
  • 信号
  • 插槽
  • Message Queue
  • 命名管道
  • 信号量
  • 共享内存
  • 消息传递
  • 内存映射文件

然而,我无法找到相互比较这些机制的清单或文件,并指出它们在不同的环境中的好处。

例如,我知道如果我使用一个由进程A写入的文件而进程B将其读出来它将在任何操作系统上运行并且非常强大,另一方面 - 为什么我不应该使用TCP套接字?有没有人对哪种方法最适合的情况进行概述?

1 个答案:

答案 0 :(得分:2)

长话短说:

  • 当进程竞争稀缺资源时,使用锁文件,互斥锁,信号量和障碍。它们以类似的方式运行:多个进程尝试获取同步原语,其中一些获取它,其他进程处于休眠状态,直到原语再次可用。使用信号量来限制使用资源的进程数量。使用互斥锁将金额限制为1.

  • 您可以通过使用非阻塞线程安全数据结构来部分避免使用同步原语。

  • 当进程需要交换数据时,使用信号,队列,管道,事件,消息,unix套接字。信号和事件通常用于通知某个进程(例如,unix终端中的ctrl+c向进程发送SIGINT信号。管道,共享内存和unix套接字用于传输数据。

  • 使用套接字进行联网(或者,正式说来,用于在位于不同计算机上的进程之间交换数据)。

长篇故事:看看Tanenbaum& amp; amp; amp; amp; amp; Bos,即IPC章节。这个主题很广泛,无法在列表或论文中完全涵盖。