2010-08-19 34 views

Respuesta

4

Windows tiene dos tipos de tuberías: tuberías anónimas y tuberías con nombre. Las canalizaciones anónimas se corresponden (bastante) con las de Unix: el uso típico es que un proceso principal las configure para que las herede un proceso secundario, a menudo conectado a las secuencias de entrada, salida y error estándar del niño. En un momento, las tuberías anónimas se implementaron de manera completamente diferente a las tuberías con nombre, por lo que no (por ejemplo) admiten E/S superpuestas. Desde entonces, eso ha cambiado, por lo que una tubería anónima es básicamente una tubería con nombre que no conoce, por lo que no puede abrirla por su nombre, pero todavía tiene todas las otras características de una tubería con nombre (como la capacidad de E/S superpuesta anteriormente mencionada).

Windows named pipes son mucho más como sockets. Se originaron con OS/2, donde originalmente eran el mecanismo principal para crear aplicaciones cliente/servidor. Originalmente se construyeron alrededor de NetBIOS (es decir, usaban NetBIOS tanto para direccionamiento como para transporte). Están estrechamente integrados con cosas como la autenticación de Windows, por lo que puede (por ejemplo) hacer que un servidor de tuberías nombrado suplante al cliente para restringirlo a hacer cosas que el cliente podría hacer si inicia sesión directamente. Más recientemente, MS se ha tomado la molestia de deshacerse de la dependencia de NetBIOS, pero a pesar de que ahora pueden usar IP como su transporte (y DNS para direccionamiento, IIRC) todavía se usan principalmente para máquinas con Windows. El uso principal en otras máquinas es imitar Windows, como ejecutar Samba.

0

(De la parte superior de la cabeza)

Pipe: Un tubo con un recipiente pequeño en un extremo; utilizado para fumar tabaco

Socket: Receptáculo cuando se inserte algo (un tubo, sonda o extremo de un hueso)

todas formas:

"Una diferencia importante entre las tuberías y enchufes es que las tuberías requiere un proceso principal común para configurar el canal de comunicaciones . Una conexión entre sockets se puede configurar mediante dos procesos no relacionados, que posiblemente residan en máquinas diferentes. "

+0

LOL, pero no está relacionado con la programación .. – wamp

+2

@VoodooChild: Vergüenza :) –

+1

Este es el problema al nombrar las cosas, es difícil. En el mundo de Windows, una "tubería con nombre" se parece más a un socket y se usa para conectar clientes a servidores en diferentes máquinas. –

3

(Desvergonzadamente cribbed de http://www.perlmonks.org/?node_id=180842)

Tubos son rápidos y fiables, ya que se implementan en la memoria en un único host donde ambos procesos se comunican corren. Los zócalos son más lentos y menos confiables, pero son mucho más flexibles ya que permiten la comunicación entre procesos en diferentes hosts.

+1

Las tuberías también permiten la comunicación entre diferentes hosts. Tenga en cuenta que está etiquetado [Windows], por lo que estamos hablando de las tuberías de Windows, no de las tuberías de Unix aquí. –

+0

¿Se puede usar un tubo varias veces? Como en este artículo, me parece que una tubería solo se puede usar una vez (se cerrará una vez utilizada): http://msdn.microsoft.com/en-us/library/aa365588%28v=VS.85%29. aspx – wamp

+0

@Jerry - cierto - una vez que esto sucede (comunicación entre máquinas) ¿hay una gran diferencia entre un tubo y un enchufe, al menos en términos de velocidad? –

1

Los zócalos usarían algún tipo de protocolo IP como TCP/IP o UDP, por lo tanto, sería más lento, pero su código sería más portátil si necesitara comunicarse a través de una red. Hay un tercer enfoque de memoria compartida y cuatro puertos Mach (en este caso no estoy seguro de que funcione con Windows)

-4

Ambos hacen la misma función, la única diferencia es que los tubos son más eficientes ya que están más cerca uno puede llegar al barebone de los internets. Los zócalos son una abstracción construida sobre la serie de tubos (tuberías), como resultado son más lentos (al igual que Java es más lento que el código de ensamblaje nativo).

Cuestiones relacionadas