Quels sont les tuyaux nommés?
Quels sont-ils et comment fonctionnent-ils?
Le contexte se trouve être SQL Server
10 réponses
Sur les systèmes Windows et POSIX, named-pipes fournit un moyen de communication inter-processus entre les processus s'exécutant sur la même machine. Ce que les tuyaux nommés vous donnent est un moyen d'envoyer vos données sans avoir la pénalité de performance d'impliquer la pile réseau.
Tout comme vous avez un serveur qui écoute une adresse IP / port pour les demandes entrantes, un serveur peut également configurer un canal nommé qui peut écouter les demandes. Dans les deux cas, le processus client (ou l'accès à la base de données bibliothèque) doit connaître l'adresse spécifique (ou le nom du canal) pour envoyer la demande. Souvent, un standard par défaut couramment utilisé existe (un peu comme le port 80 pour HTTP, SQL server utilise le port 1433 dans TCP/ IP;\\.\pipe\sql\requête pour un tube nommé).
En configurant des canaux nommés supplémentaires, vous pouvez avoir plusieurs serveurs DB en cours d'exécution, chacun avec ses propres écouteurs de requête.
L'avantage des canaux nommés est qu'ils sont généralement beaucoup plus rapides et libèrent des ressources de pile réseau.
-- BTW, dans le Dans le monde Windows, vous pouvez également avoir des tuyaux nommés vers des machines distantes-mais dans ce cas, le tuyau nommé est transporté sur TCP/IP, de sorte que vous perdrez les performances. Utilisez des tuyaux nommés pour la communication locale de la machine.
Unix et Windows ont tous deux des choses appelées "named pipes", mais ils se comportent différemment. Sur Unix, un tube nommé est une rue à sens unique qui a généralement juste un lecteur et un écrivain de l'écrivain écrit, et le lecteur lit, vous l'obtenir?
Sous Windows, la chose appelée "Named pipe" est un objet IPC plus comme un socket TCP - les choses peuvent circuler dans les deux sens et il y a des métadonnées (vous pouvez obtenir les informations d'identification de la chose à l'autre extrémité, etc.).
Les pipes nommées Unix apparaissent comme fichier spécial dans le système de fichiers et peut être consulté avec des commandes d'E / S de fichier normales, y compris le shell. Windows ne le font pas, et doivent être ouverts avec un appel système spécial (après quoi ils se comportent principalement comme un handle win32 normal).
Encore plus déroutant, Unix a quelque chose appelé un" socket Unix "ou un socket AF_UNIX, qui fonctionne plus comme (mais pas complètement comme) un win32 "named pipe", étant bidirectionnel.
Linux Tuyaux
Mécanisme de communication interproccès premier entré premier sorti (FIFO).
Tuyaux Sans Nom
Sur la ligne de commande, représentée par un " | " entre deux commandes.
Les Canaux Nommés
Un dossier spécial FIFO. Une fois créée, vous pouvez utiliser le tuyau juste comme un fichier normal(ouvrir, fermer, écrire, lire, etc).
Pour créer un tube nommé, appelé "myPipe", à partir de la ligne de commande (Page de manuel):
mkfifo myPipe
Pour créer un tube nommé à partir de c, où "pathname" est le nom que vous souhaitez que le canal ait et "mode" contient les autorisations que vous voulez que le canal ait ( Page de manuel):
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
Selon Wikipedia:
[...] Un tuyau traditionnel est "sans nom" car il existe de manière anonyme et ne persiste que tant que le processus est en cours d'exécution. Un tuyau nommé est persistant dans le système et existe au-delà de la durée de vie du processus et doit être "non lié" ou supprimé une fois qu'il n'est plus utilisé. Les processus s'attachent généralement au tube nommé (apparaissant généralement sous la forme d'un fichier) pour effectuer la CIB (communication inter-processus).
Comparer
echo "test" | wc
À
mkdnod apipe p
wc apipe
Wc va bloquer jusqu'à
echo "test" > apipe
Exécute
Les tuyaux sont un moyen de diffuser des données entre les applications. Sous Linux, je l'utilise tout le temps pour diffuser la sortie d'un processus dans un autre. Ceci est anonyme parce que l'application de destination n'a aucune idée d'où vient ce flux d'entrée. Il n'est pas nécessaire.
Unnommé pipe est juste un moyen de s'accrocher activement à un tuyau existant et de capter ses données. C'est pour les situations où le fournisseur ne sait pas quels clients vont manger les données.
Les canaux nommés dans un contexte unix/linux peuvent être utilisés pour faire communiquer deux shells différents car un shell ne peut tout simplement rien partager avec un autre.
De plus, un script instancié deux fois dans le même shell ne peut rien partager à travers les deux instances. J'ai trouvé une utilisation pour les tuyaux nommés lors du codage d'un démon qui contient les fonctions start() et stop (), et je voulais utiliser le même script pour effectuer les deux actions.
Sans pipes nommées (ou tout type de sémaphore) démarrer le script en arrière-plan n'est pas un problème. La chose est quand il se termine, vous ne pouvez pas accéder à l'instance en arrière-plan.
Donc, quand vous voulez lui envoyer la commande stop, vous ne pouvez tout simplement pas: exécuter le même script sans tuyaux nommés et appeler la fonction stop () ne fera rien puisque vous exécutez une autre instance.
La solution consistait à implémenter deux tuyaux, L'un en lecture et L'autre en écriture lorsque vous démarrez le démon. Alors faites-le, parmi ses autres tâches, écoutez le tuyau de lecture. Ensuite, la fonction Stop() contient une commande qui écrira un message dans le tuyau, qui sera géré par le script en cours d'exécution en arrière-plan qui effectuera une sortie 0. De cette façon, notre deuxième instance du même script n'a qu'une tâche à faire: dire à la première instance de s'arrêter.
De cette façon, un seul script peut démarrer et s'arrêter.
Bien sûr, vous avez différentes façons de le faire en déclenchant l'arrêt via une touche par exemple. Mais c'est belle et intéressant de code.
Ceci est un exeprt de Technet (donc je ne sais pas pourquoi la réponse marquée dit que les tuyaux nommés sont plus rapides??):
Tuyaux nommés par rapport aux Sockets TCP/IP
Dans un environnement de réseau local rapide (LAN), les Sockets TCP/IP (Transmission Control Protocol / Internet Protocol) et les clients pipes nommés sont comparables en ce qui concerne les performances. Cependant, la différence de performance entre les Sockets TCP/IP et les clients pipes nommés devient évidente avec des réseaux plus lents, tels que sur une vaste zone réseaux (WANs) ou réseaux commutés. Cela est dû aux différentes façons dont les mécanismes de communication interprocess (IPC) communiquent entre pairs.
Pour les canaux nommés, les communications réseau sont généralement plus interactives. Un homologue n'envoie pas de données tant qu'un autre homologue ne le demande pas à l'aide d'une commande de lecture. Une lecture réseau implique généralement une série de messages Peek nommés pipes avant de commencer à lire les données. Ceux-ci peuvent être très coûteux dans un réseau lent et causer un réseau excessif trafic , qui à son tour affecte d'autres clients du réseau.
Il est également important de préciser si vous parlez de tuyaux locaux ou de tuyaux de réseau. Si l'application serveur s'exécute localement sur l'ordinateur qui exécute une instance de SQL Server, le protocole local nommé Pipes est une option. Les tuyaux nommés locaux s'exécutent en mode noyau et sont très rapides.
Pour les Sockets TCP/IP, les transmissions de données sont plus simplifiées et ont moins de frais généraux. Les transmissions de données peuvent également prendre avantage des mécanismes D'amélioration des performances des Sockets TCP/IP tels que le fenêtrage, les accusés de réception retardés, etc. Cela peut être très utile dans un réseau lent. Selon le type d'applications, de telles différences de performance peuvent être significatives.
Les Sockets TCP/IP prennent également en charge une file d'attente de backlog. Cela peut fournir un effet de lissage limité par rapport aux tuyaux nommés qui pourraient conduire à des erreurs de tuyau occupé lorsque vous essayez de vous connecter à SQL Server.
Généralement, TCP / IP est préféré dans un réseau LAN, WAN ou dial-up lent, alors que les tuyaux nommés peuvent être un meilleur choix lorsque la vitesse du réseau n'est pas le problème, car il offre plus de fonctionnalités, de facilité d'utilisation et d'options de configuration.
Canaux Nommés est un système windows pour la communication inter-processus. Dans le cas de SQL server, si le serveur est sur la même machine que le client, il est possible d'utiliser des canaux nommés pour transférer les données, par opposition à TCP/IP.