在什么时候应该使用哪种进程间通信(IPC)机制?

3
我知道有几种进程间通信(IPC)的方法,比如:
  • 文件
  • 信号
  • 套接字
  • 消息队列
  • 管道
  • 命名管道
  • 信号量
  • 共享内存
  • 消息传递
  • 内存映射文件
然而,我无法找到一个将这些机制相互比较并指出它们在不同环境下的优点的列表或论文。
例如,我知道如果我使用一个由进程A写入并由进程B读取的文件,它可以在任何操作系统上运行且非常健壮,但是,为什么我不应该使用TCP套接字?是否有人能提供一种概述,在哪些情况下使用哪种方法最合适?
1个回答

2

简短地说:

  • 当进程竞争有限资源时,请使用锁文件、互斥量、信号量和屏障。它们的运作方式相似:多个进程尝试获取一个“同步原语”,其中一些获得了它,其他的则处于睡眠状态,直到该原语再次可用。使用信号量来限制处理资源的数量。使用互斥量将其限制为 1。

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

  • 当进程需要交换数据时,请使用信号、队列、管道、事件、消息和Unix套接字。通常使用信号和事件来通知进程某些事情(例如,在Unix终端中按下ctrl+c会向进程发送SIGINT信号)。管道、共享内存和Unix套接字用于传输数据。

  • 使用套接字进行网络通信(或者正式地说,进行位于不同机器上的进程之间的数据交换)。

详细介绍:请参考Tanenbaum&Bos的《现代操作系统》书籍,特别是IPC章节。这个主题很广泛,无法在列表或文章中完全涵盖。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接