两者都可以用于不同进程之间的通信,
有什么不同?
原文由 wamp 发布,翻译遵循 CC BY-SA 4.0 许可协议
(无耻地抄袭自 http://www.perlmonks.org/?node_id=180842 )
管道快速且可靠,因为它们是在单个主机上的内存中实现的,两个通信进程都在该主机上运行。套接字速度较慢且可靠性较低,但更灵活,因为它们允许不同主机上的进程之间进行通信。
原文由 Will A 发布,翻译遵循 CC BY-SA 2.5 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
Windows 有两种管道:匿名管道和命名管道。匿名管道(相当)对应于 Unix 管道——典型的用法是父进程将它们设置为由子进程继承,通常连接到子进程的标准输入、输出和/或错误流。曾经,匿名管道的实现方式与命名管道完全不同,因此它们(例如)不支持重叠 I/O。从那以后,情况发生了变化,因此匿名管道基本上只是一个名称不知道的命名管道,因此您无法通过名称打开它,但它仍然具有命名管道的所有其他功能(例如前面提到的重叠 I/O 能力)。
Windows 命名管道更像是套接字。它们起源于 OS/2,它们最初是创建客户端/服务器应用程序的主要机制。它们最初是围绕 NetBIOS 构建的(即,使用 NetBIOS 进行寻址和传输)。它们与 Windows 身份验证等功能紧密集成,因此您可以(例如)让命名管道服务器模拟客户端,以限制服务器执行客户端直接登录时可以执行的操作。最近,MS 在摆脱对 NetBIOS 的依赖方面遇到了一些麻烦,但即使他们现在可以使用 IP 作为传输(以及用于寻址的 DNS,IIRC),它们仍然主要用于 Windows 机器。在其他机器上的主要用途是模仿 Windows,例如运行 Samba。