首页 > 解决方案 > 在 Linux 中使用 UNIX 命名管道而不是 TCP 套接字的好处?

问题描述

在我读到命名管道与套接字的任何地方,我都看到套接字可以做命名管道可以做的事情,等等。我猜管道可能会更快,因为它们更简单,但我没有在任何地方明确找到它。

在 Linux 中,使用命名管道而不是套接字有什么好处?

感谢您的帮助和时间。


编辑:我在这里找到了一些比较,但这些是 UNIX 套接字(又名 UNIX 域套接字),基于此,我知道它们是不同的生物。

因此,我澄清一下:我问的是 TCP 套接字与 Unix 命名管道的对比(因为 MS Windows 有另一个叫做“命名管道”的东西,但它们在功能上似乎更类似于 UNIX 域套接字)。

在这一点上,在我看来,UNIX 命名管道比 TCP 套接字更快,但我想知道一些技术细节,说明为什么会这样,以及其他潜在的好处。

标签: linuxsocketsnamed-pipes

解决方案


这可能是一个不完美的答案,但这就是我所知道的。

通过 TCP 套接字发送数据意味着传输需要通过您的网络系统,将获得源和目标 IP,最多分成 64K 数据包。打包在 TCP 和 IP 信封中,可能会通过防火墙规则。收件人还需要确认包裹,确保它们按顺序到达,并且需要进行协商,以防包裹丢失并需要重新发送。

在命名管道中发送数据或多或少就像写入文件描述符(如 STDOUT)并从 STDIN 读取。

通过网络堆栈(即使它只是本地主机)只是有更多的层次和复杂性。可以可靠地将消息发送到世界另一端的系统需要它,但简单的本地命名管道不需要。


推荐阅读