2010-08-19 84 views
10

既可以用于不同进程之间的通信,管道和插座有什么区别?

有什么区别?

+7

主题听起来像一个恶意的玩笑 – 2010-08-19 03:56:34

+0

所以给我们的冲压生产线的开始! – peterchen 2010-08-19 06:39:29

回答

4

的Windows有两种管道:匿名管道和命名管道。匿名管道与Unix管道(相当)密切相关 - 典型的用法是让父进程将它们设置为由子进程继承,通常连接到子进程的标准输入,输出和/或错误流。有一次,匿名管道与命名管道完全不同,所以他们没有(例如)支持重叠的I/O。从那以后,这种情况发生了变化,因此匿名管道基本上只是一个名称不明的名称管道,因此无法通过名称打开它,但它仍具有命名管道的所有其他功能(例如前述重叠的I/O能力)。

的Windows命名管道被更像插座。它们起源于OS/2,它们最初是创建客户机/服务器应用程序的主要机制。它们最初是围绕NetBIOS构建的(即使用NetBIOS进行寻址和传输)。它们与Windows身份验证等紧密集成,因此您可以(例如)使用命名管道服务器模拟客户端,以限制服务器执行客户端直接登录时可以执行的操作。最近,MS为了摆脱对NetBIOS的依赖而陷入了一些麻烦,但即使他们现在可以使用IP作为它们的传输(以及用于寻址的DNS,IIRC),它们仍然主要用于Windows机器。其他机器上的主要用途是模仿Windows,比如通过运行Samba。

0

(关我的头的顶部)

管:具有在一端具有小碗的管;用于烟丝

插槽:插座,其中一些(骨的管,探针或端)被插入

反正:

“管道和 插座之间的一个主要区别是管道需要一个共同的 父进程来设置通信通道。套接字之间的连接 可以由两个不相关的进程建立,可能在不同的机器上驻留 。

+0

大声笑,但它不是编程相关.. – wamp 2010-08-19 03:55:35

+2

@VoodooChild:羞耻:) – 2010-08-19 03:55:40

+1

这是命名事情的麻烦,这很难。在Windows环境中,“命名管道”更像是一个套接字,用于将客户端连接到不同机器上的服务器。 – 2010-08-19 04:06:13

3

(从http://www.perlmonks.org/?node_id=180842无耻那儿剽窃)

管道是快速和可靠的,因为它们是在存储器中实现的单个主机其中两个通信的进程运行。套接字速度较慢,可靠性较差,但它们更灵活,因为它们允许不同主机上的进程之间进行通信。

+1

管道还允许不同主机之间的通信。请注意,它被标记为[Windows],所以我们在讨论Windows管道,而不是Unix管道。 – 2010-08-19 04:20:13

+0

一根管子可以多次使用吗?正如在本文中,在我看来,一个管道只能使用一次(一旦使用就会关闭):http://msdn.microsoft.com/en-us/library/aa365588%28v=VS.85%29。 aspx – wamp 2010-08-19 04:21:01

+0

@Jerry - true - 一旦发生这种情况(机器间通信),管道和套接字之间是否有很大区别,至少在速度方面? – 2010-08-19 06:39:03

1

套接字将使用某种形式的IP协议如TCP/IP或UDP的,因而会比较慢,但是你的code'd是更便携,如果你需要通过网络进行通信。还有第三个共享MEM方法,并提出马赫端口(在这种情况下,我不知道它会在Windows工作)

-4

他们都做同样的功能,唯一的区别是,管道是因为他们最接近的更有效人们可以到互联网的准系统。套接字是建立在一系列管道(管道)之上的抽象,因此它们速度较慢(就像java比本地汇编代码一样慢)。