Frage

Was sind sie und wie funktionieren sie?

Kontext geschieht SQL Server sein

War es hilfreich?

Lösung

Sowohl unter Windows und POSIX-Systemen, genannt Pipes bieten eine Möglichkeit für Interprozesskommunikation zwischen Prozessen läuft auf der gleichen Maschine auftreten. Was Named Pipes gibt Ihnen eine Möglichkeit, Ihre Daten zu senden, ohne die Leistungseinbuße mit dem Netzwerk-Stack einbezogen werden muß.

Wie Sie einen Server haben zu einer IP-Adresse / Port für eingehende Anfragen zu hören, kann ein Server auch eine Named Pipe eingerichtet, die für Anfragen hören. In beiden Fällen muss der Client-Prozess (oder der DB-Zugriffs-Bibliothek) kennen die spezifische Adresse (oder Pipenamen) die Anfrage zu senden. Oft besteht ein häufig verwendeter Standard Standard (ähnlich wie Port 80 für HTTP, SQL-Server verwendet Port 1433 in TCP / IP; \\. \ Pipe \ sql \ query für eine Named Pipe).

Mit dem zusätzlichen Named Pipes einrichten, können Sie mehr DB-Server laufen haben, jeder mit seinen eigenen Wunsch Zuhörern.

Der Vorteil von Named Pipes ist, dass es in der Regel viel schneller ist, und entlastet Netzwerk-Stack-Ressourcen.

- BTW, in der Windows-Welt, können Sie auch haben Rohre zu entfernten Rechnern genannt - aber in diesem Fall wird das Named Pipes über TCP / IP transportiert, so dass Sie die Leistung verlieren. Verwenden Sie Named Pipes für die lokale Maschine-Kommunikation.

Andere Tipps

Unix und Windows haben beide Dinge „Named Pipes“ genannt, aber sie verhalten sich anders. Unter Unix ein Named Pipe eine Einbahnstraße ist, die typischerweise nur einen Leser und einen Schriftsteller hat - der Autor schreibt, und der Leser liest, Sie es

Unter Windows ist die Sache ein „Named Pipe“ genannt wird, ist ein IPC-Objekt mehr wie ein TCP-Socket - Dinge können in beiden Richtungen fließen und es gibt einige Metadaten (Sie können die Anmeldeinformationen des Dinges am anderen Ende etc erhalten).

Unix Named Pipes als spezielle Datei im Dateisystem erscheint und kann mit normaler Datei IO-Befehlen einschließlich der Shell zugegriffen werden. Windows-diejenigen nicht, und müssen mit einem speziellen Systemaufruf geöffnet werden (nach dem sie verhalten sich meist wie ein normaler win32 Griff).

Noch verwirrender, Unix hat etwas ein "Unix-Socket" oder AF_UNIX Buchse genannt, die eher wie (aber nicht ganz wie) ein win32 "Named Pipe" arbeitet bidirektional sein.

Linux Pipes
First In First Out (FIFO) interproccess Kommunikationsmechanismus.

unbenannte Pipes
Auf der Kommandozeile, dargestellt durch ein „|“ zwischen zwei Befehlen.

Named Pipes
Eine FIFO spezielle Datei. Einmal erstellt, können Sie das Rohr wie eine normale Datei verwenden (öffnen, schließen, schreiben, lesen, etc.).

eine Named Pipe zu erstellen, genannt "meinepipe", von der Kommandozeile ( Manpage ):

mkfifo myPipe  

eine Named Pipe von c zu erstellen, in dem „Pfadname“ ist der Name, den Sie das Rohr haben und „Modus“ möchte die Berechtigungen enthält, die Sie das Rohr haben sollen ( man ):

#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);

Nach Wikipedia :

  

[...] Ein traditionelles Rohr ist „unnamed“, weil es anonym und dauert existiert nur, solange der Prozess läuft. Eine Named Pipe ist system hartnäckig und besteht über die gesamte Lebensdauer des Prozesses und muß „unverbundene“ oder gelöscht werden, sobald sie nicht mehr verwendet werden. Prozesse anhängen im Allgemeinen auf die Named Pipe (in der Regel als Datei erscheinen) IPC auszuführen (Interprozesskommunikation).

Vergleichen

echo "test" | wc

mkdnod apipe p
wc apipe

wc wird blockiert, bis

echo "test" > apipe

ausführt

Die Rohre sind eine Möglichkeit, Daten zwischen Anwendungen von Streaming. Unter Linux verwende ich diese die ganze Zeit die Ausgabe eines Prozesses in eine andere zu übertragen. Dies ist anonym, da das Ziel App keine Ahnung haben, wo das Eingangsstrom herkommt. Es braucht nicht zu.

A Namen Rohr ist nur eine Möglichkeit, aktiv auf ein bestehendes Rohr Einhaken und seine Daten hoovering-up. Es ist für Situationen, in denen der Anbieter nicht weiß, was Kunden die Daten essen werden.

Inter-Prozess-Kommunikation (meistens) für Windows-Anwendungen. Ähnlich wie Sockets zwischen Anwendungen in Unix zu kommunizieren.

MSDN

Dies ist ein exeprt von Technet (also nicht sicher, warum die markierten Antwort sagt Named Pipes ist schneller ??):

Named Pipes vs. TCP / IP-Sockets

In einer schnelles lokales Netzwerk (LAN) -Umgebung, Transmission Control Protocol / Internet Protocol (TCP / IP) Sockets und Named Pipes-Clients sind vergleichbar in Bezug auf Leistung. Jedoch wird die Leistungsdifferenz zwischen den TCP / IP-Sockets und Named Pipes-Clients offensichtlich mit langsameren Netzwerken wie über Wide Area Networks (WANs) oder DFÜ-Netzwerke. Dies ist wegen der unterschiedlichen Möglichkeiten der Interprozesskommunikation (IPC) Mechanismen kommunizieren zwischen den Peers.

Für Named Pipes, Netzwerk-Kommunikation ist in der Regel mehr interaktiv. Ein Peer keine Daten senden, bis ein anderer Peer fordert es einen Lesebefehl verwendet wird. Ein Netzwerk lesen umfasst in der Regel eine Reihe von Peek Named Pipes-Nachrichten, bevor es beginnt, die Daten zu lesen. Diese können sehr kostspielig in einem langsamen Netzwerk und verursachen übermäßigen Netzwerkverkehr , was wiederum wirkt sich auf andere Netzwerk-Clients.

Es ist auch wichtig zu klären, ob Sie lokale Leitungen oder Netzleitungen sprechen werden über. Wenn die Server-Anwendung lokal auf dem Computer ausgeführt werden, die eine Instanz von SQL Server ausgeführt wird, ist das lokale Named Pipes-Protokoll eine Option. Lokale Named Pipes läuft im Kernel-Modus und ist sehr schnell.

Für TCP / IP-Sockets, Datenübertragungen sind schlanker und weniger Overhead. Datenübertragungen können auch nutzen TCP / IP-Sockets Leistungssteigerung Mechanismen wie Windowing, verzögerte Bestätigungen, und so weiter. Dies kann in einem langsamen Netzwerk sehr hilfreich sein. Je nach Art der Anwendungen kann eine solche Leistungsunterschiede von Bedeutung sein.

TCP / IP-Sockets eine Backlogwarteschlange unterstützen. Dies kann einen begrenzten Glättungseffekt bietet im Vergleich zu Named Pipes, den Rohr-busy Fehlern führen könnte, wenn Sie versuchen, SQL Server zu verbinden.

Im Allgemeinen wird TCP / IP in einem langsamen LAN, WAN bevorzugt, oder DFÜ-Netzwerk, während Named Pipes kann eine bessere Wahl sein, wenn die Netzwerkgeschwindigkeit ist nicht das Problem, da es mehr Funktionalität bietet, einfache Bedienung und Konfigurationsoptionen.

Named Pipes in einem Unix / Linux-Kontext verwendet werden kann zwei verschiedene Schalen zu machen, um zu kommunizieren, da eine Schale kann einfach nichts mit einem anderen teilen.

Darüber hinaus kann ein Skript zweimal in der gleichen Shell instanziiert kann nichts über die beiden Instanzen teilen. Ich fand eine Verwendung für Named Pipes, wenn ein Dämon Codierung, die den Start enthält () und stop () Funktion, und ich wollte das gleiche Skript verwenden, um die zwei Aktionen auszuführen.

Ohne Named Pipes (oder jede Art von Semaphore) beginnt das Skript im Hintergrund ist das kein Problem. Die Sache ist, wenn es fertig ist man einfach nicht die Instanz im Hintergrund zugreifen kann.

Also, wenn Sie wollen, dass er den Stoppbefehl senden können Sie einfach nicht. Das gleiche Skript ohne Named Pipes läuft und ruft die Funktion stop () wird nichts tun, da Sie tatsächlich eine andere Instanz läuft

Die Lösung wurde zwei Rohre zu implementieren, ein READ und die anderen schreiben, wenn Sie den Daemon starten. Dann macht ihn unter seinen anderen Aufgaben, auf das READ Rohr hören. Dann enthält die Stop () Funktion einen Befehl, der eine Nachricht in dem Rohr schreiben wird, die von dem Hintergrund ausgeführt Skript behandelt werden, die einen Ausgang 0. Auf diese Weise unserer zweite Instanz des gleichen Skript nur auf Aufgabe hat durchführen werden zu tun: sagen, die erste Instanz zu stoppen.

Auf diese Weise ein und nur ein Skript können selbst starten und stoppen.

Natürlich haben Sie verschiedene Möglichkeiten, es zu tun, indem sie den Anschlag über einen Touch beispielsweise ausgelöst wird. Aber dies ist schön und interessant Code.

Named Pipes ist ein Windows-System für die Kommunikation zwischen Prozessen. Im Fall von SQL Server, wenn der Server auf der gleichen Maschine wie der Client ist, dann ist es möglich, Named Pipes zu verwenden, um die Daten zu Tranfer, wie TCP / IP gegenüber.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top