2010-08-19 6 views

Antwort

4

Windows hat zwei Arten von Rohren: anonyme Rohre und Named Pipes. Anonyme Pipes entsprechen (ziemlich) genau den Unix-Pipes - eine typische Verwendung für einen übergeordneten Prozess besteht darin, sie so einzurichten, dass sie von einem untergeordneten Prozess geerbt werden, der oft mit den standardmäßigen Eingabe-, Ausgabe- und/oder Fehlerströmen des Kindes verbunden ist. Einmal wurden anonyme Pipes vollständig anders als Named Pipes implementiert, sodass sie (zum Beispiel) überlappende I/O nicht unterstützten. Seitdem hat sich das geändert, also ist eine anonyme Pipe im Grunde nur eine Named Pipe mit einem Namen, den Sie nicht kennen. Sie kann also nicht mit dem Namen geöffnet werden, aber sie hat immer noch alle anderen Funktionen einer Named Pipe (wie die oben erwähnte überlappende E/A-Fähigkeit).

Windows benannte Pipes sind viel mehr wie Sockets. Sie stammen ursprünglich aus OS/2, wo sie ursprünglich der wichtigste Mechanismus für die Erstellung von Client/Server-Anwendungen waren. Sie wurden ursprünglich um NetBIOS herum gebaut (d. H. Verwendetes NetBIOS sowohl zum Adressieren als auch zum Transport). Sie sind eng in Dinge wie Windows-Authentifizierung integriert, so dass Sie beispielsweise einen Named-Pipe-Server als den Client anerkennen lassen können, um den Server auf Dinge zu beschränken, die der Client ausführen könnte, wenn er sich direkt anmeldet. In jüngster Zeit hat MS einige Schwierigkeiten, um die Abhängigkeit von NetBIOS loszuwerden, aber obwohl sie jetzt IP als Transport (und DNS für die Adressierung, IIRC) verwenden können, werden sie immer noch in erster Linie für Windows-Maschinen verwendet. Die primäre Verwendung auf anderen Computern besteht darin, Windows zu imitieren, z. B. durch Ausführen von Samba.

0

(Aus der Spitze von dem Kopf)

Rohr: Ein Rohr mit einer kleinen Schüssel an einem Ende; verwendet für Tabakrauchen

Sockel: Receptacle wo

Anyways eingesetzt ist etwas (ein Rohr, Sonde oder das Ende eines Knochen):

„ist ein Hauptunterschied zwischen den Rohren und Sockets, die Rohre einen gemeinsamen übergeordneten Prozess benötigen, um den Kommunikationskanal einzurichten. Eine Verbindung zwischen Sockets kann durch zwei unabhängige Prozesse eingerichtet werden, möglicherweise auf verschiedenen Maschinen.

+0

LOL, aber es ist nicht programmierte .. – wamp

+2

@ VoodooChild: Shame :) –

+1

Dies ist das Problem mit der Nennung von Dingen, es ist schwer. In der Windows-Welt ähnelt eine "Named Pipe" eher einem Socket und wird verwendet, um Clients mit Servern auf verschiedenen Computern zu verbinden. –

3

(Schamlos cribbed von http://www.perlmonks.org/?node_id=180842)

Rohre sind schnell und zuverlässig, weil sie im Speicher auf einem einzigen Host implementiert werden, wo beiden kommunizierenden Prozesse laufen. Sockets sind langsamer und weniger zuverlässig, sind aber viel flexibler, da sie die Kommunikation zwischen Prozessen auf verschiedenen Hosts ermöglichen.

+1

Pipes ermöglichen auch die Kommunikation zwischen verschiedenen Hosts. Beachten Sie, dass es mit [Windows] getaggt ist, also sprechen wir hier über Windows-Pipes, nicht über Unix-Pipes. –

+0

Kann ein Rohr mehrfach verwendet werden? Wie in diesem Artikel scheint mir, dass eine Pipe nur einmal verwendet werden kann (wird einmal geschlossen): http://msdn.microsoft.com/en-us/library/aa365588%28v=VS.85%29. aspx – wamp

+0

@Jerry - wahr - sobald das passiert (inter-machine communication) gibt es einen großen Unterschied zwischen einem Rohr und einer Steckdose, zumindest in Bezug auf die Geschwindigkeit? –

1

Sockets würden eine Art von IP-Protokoll wie TCP/IP oder UDP verwenden, wäre also langsamer, aber Ihr Code wäre portabler, wenn Sie über ein Netzwerk kommunizieren müssten. Es gibt eine dritte Shared-Mem-Ansatz und her Mach-Ports (in diesem Fall bin ich mir nicht sicher, würde es mit Windows funktionieren)

-4

Sie beide die gleiche Funktion, der einzige Unterschied ist, dass Rohre sind effizienter, da sie am nächsten sind man kann zu den Barebones von Internets gelangen. Sockets sind eine Abstraktion, die auf einer Reihe von Röhren (Pipes) aufbaut, weshalb sie langsamer sind (genau wie Java langsamer ist als nativer Assemblercode).

Verwandte Themen