两者都可以用于不同进程之间的通信,
有什么不同?
Windows有两种管道:匿名管道和命名管道。 匿名管道与Unix管道(相当)密切相关 – 典型的用法是父进程将它们设置为由子进程继承,通常连接到子进程的标准输入,输出和/或错误流。 有一段时间,匿名管道与命名管道完全不同,所以他们没有(例如)支持重叠的I / O。 从那以后,这个改变了,所以匿名管道基本上就是一个名字你不知道的命名管道,所以你不能通过名字来打开它,但是它仍然具有命名管道的所有其他功能(比如前述重叠的I / O能力)。
Windows命名的管道更像套接字。 它们起源于OS / 2,它们最初是创建客户机/服务器应用程序的主要机制。 它们最初是围绕NetBIOS构建的(即使用NetBIOS进行寻址和传输)。 它们与Windows身份验证紧密集成,因此您可以(例如)使用命名管道服务器模拟客户端,以限制服务器执行客户端直接登录时可以执行的操作。 最近,MS为了摆脱对NetBIOS的依赖而陷入了一些麻烦,但即使他们现在可以使用IP作为传输层(和DNS寻址,IIRC),他们仍然主要用于Windows机器。 其他机器上的主要用途是模仿Windows,例如运行Samba。
(从http://www.perlmonks.org/?node_id=180842无耻地摇摇晃晃)
管道是快速和可靠的,因为它们在单个主机上的内存中执行,在这两个进程上运行通信进程。 套接字速度较慢,可靠性较差,但由于它们允许不同主机上的进程之间进行通信,所以更加灵活。
套接字将使用某种类型的IP协议,如TCP / IP或UDP,因此速度会更慢,但是如果您需要通过网络进行通信,则代码将更加便于携带。 有第三个共享内存的方法和马赫端口(在这种情况下,我不知道它可以与Windows工作)
(离我头顶)
管子:一端有小碗的管子; 用于吸烟
插座:插入某物(管道,探针或骨头端)的插座
无论如何:
“管道和套接字之间的主要区别在于管道需要一个共同的父进程来建立通信通道,套接字之间的连接可以由两个不相关的进程建立,可能驻留在不同的机器上。
他们都做同样的功能,唯一的区别是管道更有效率,因为他们是最接近互联网的准系统。 套接字是建立在一系列管道(管道)之上的一种抽象,因为它们比较慢(就像java比本地汇编代码一样慢)。