【问题标题】:Which kind of inter process communication (ipc) mechanism should I use at which moment?我应该在什么时候使用哪种进程间通信 (ipc) 机制?
【发布时间】:2016-10-12 18:33:12
【问题描述】:
我知道进程间通信(ipc)有几种方法,比如:
- 文件
- 信号
- 套接字
- 消息队列
- 管道
- 命名管道
- 信号量
- 共享内存
- 消息传递
- 内存映射文件
但是我无法找到一份清单或一篇论文来比较这些机制并指出它们在不同环境中的好处。
例如,我知道如果我使用由进程 A 写入的文件并且进程 B 读取它,它将在任何操作系统上运行并且非常强大,另一方面 - 为什么我不应该使用 TCP Socket ?有没有人概述在哪些情况下哪种方法最合适?
【问题讨论】:
标签:
sockets
process
pipe
ipc
message
【解决方案1】:
长话短说:
当进程争夺稀缺资源时,使用锁定文件、互斥体、信号量和屏障。它们以类似的方式运行:多个进程尝试获取同步原语,其中一些进程获取它,其他进程处于休眠状态,直到该原语再次可用。使用信号量来限制使用资源的进程数量。使用互斥体将数量限制为 1。
您可以通过使用非阻塞线程安全数据结构来部分避免使用同步原语。
当进程需要交换数据时,使用信号、队列、管道、事件、消息、unix 套接字。信号和事件通常用于通知进程某事(例如,unix 终端中的ctrl+c 向进程发送SIGINT 信号)。管道、共享内存和 unix 套接字用于传输数据。
使用套接字进行联网(或者,正式地说,用于在位于不同机器上的进程之间交换数据)。
长话短说:看看 Tanenbaum & Bos 的 Modern Operating Systems 一书,即 IPC 章节。这个话题非常广泛,无法在列表或论文中完全涵盖。