IPC、域套接字和命名管道的区别

8

IPC和Unix域套接字以及命名管道有何不同?

我从各种书籍中得到了模糊的定义,但无法明确应该在哪里使用哪个。


那个线程似乎引起了更多的关注:https://dev59.com/emox5IYBdhLWcg3wCQAq - schmijos
4个回答

6

正如qrdl所述,UNIX域套接字和命名管道都是IPC机制。

在这两种机制中,命名管道比UNIX域套接字更易于使用,但远不及UNIX域套接字灵活。例如,如果您可能期望每个写入进程有多个读取进程,则UNIX域套接字是必须的;如果您希望在写入进程执行期间停止和启动读取进程,则需要使用UNIX域套接字。


6

几乎任何两个进程之间相互通信的方式都可以被视为IPC。

例如:

  1. 未命名管道(cat file.txt | grep foo)或命名管道
  2. Unix域套接字
  3. TCP或UDP套接字
  4. Linux上的Netlink套接字
  5. 各种共享内存机制,如内存映射文件
  6. 高速消息传递,例如ZeroMQ

4

IPC 是指进程间通信。UNIX域套接字和命名管道是两种IPC机制,可以在维基百科上找到详细描述:


0

感谢关注这个问题,以下是一些更新的特性:

在域套接字中,实际通信(数据交换)不使用文件系统,而是使用内核内存中的缓冲区。默认情况下,它是全双工模式。

命名管道通过其访问点进行标识,即在文件系统上保存用于处理数据的文件。命名管道默认支持阻塞读写操作。但是,可以通过在打开它们时指定O_NONBLOCK标志来使命名管道支持非阻塞操作。命名管道必须以只读或只写方式打开。不能以读写方式打开,因为它是半双工的,是单向通道。


2
OP 问了关于域套接字的问题。域套接字通常是通过管道实现的,因此它们与管道一样快。域套接字非常有用,因为它们具有与网络套接字完全相同的接口(只是不同的套接字族),因此如果您的应用程序支持套接字,并且您发现双方都位于同一台计算机上,您可以轻松地切换到域套接字以加速处理速度(X Windows 就是这样做的)。因此,你的答案是不正确的。 - qrdl

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