2010-08-19 7 views

Répondre

4

Windows a deux types de tuyaux: les tuyaux anonymes et les tuyaux nommés. Les pipes anonymes correspondent (assez) étroitement aux pipes Unix - l'usage typique est pour un processus parent de les configurer pour qu'elles soient héritées par un processus fils, souvent connecté aux flux standards d'entrée, de sortie et/ou d'erreur de l'enfant. À un moment donné, les canaux anonymes étaient implémentés complètement différemment des canaux nommés, de sorte qu'ils ne supportaient pas (par exemple) les E/S superposées. Depuis lors, cela a changé donc un tuyau anonyme est fondamentalement juste un tuyau nommé avec un nom que vous ne connaissez pas, donc vous ne pouvez pas l'ouvrir par son nom, mais il a toujours toutes les autres caractéristiques d'un tuyau nommé (comme le capacité d'E/S chevauchée susmentionnée).

Les tubes nommés Windows ressemblent beaucoup plus à des sockets. Ils sont apparus avec OS/2, où ils étaient à l'origine le principal mécanisme de création d'applications client/serveur. Ils ont été construits à l'origine autour de NetBIOS (c'est-à-dire, utilisé NetBIOS à la fois pour l'adressage et le transport). Ils sont étroitement intégrés à des choses comme l'authentification Windows, de sorte que vous pouvez (par exemple) avoir un serveur de pipe nommé usurper l'identité du client pour restreindre le serveur à faire des choses que le client serait capable de faire si connecté directement. Plus récemment, MS s'est donné quelques soucis pour se débarrasser de la dépendance à NetBIOS, mais même s'ils peuvent maintenant utiliser IP comme moyen de transport (et DNS pour adresser, IIRC) ils sont toujours utilisés principalement pour les machines Windows. L'utilisation principale sur d'autres machines est d'imiter Windows, comme en exécutant Samba.

0

(Du haut de ma tête)

Tuyau: Un tube avec un petit bol à une extrémité; utilisé pour fumer du tabac

Socket: Receptacle où quelque chose (un tuyau, d'une sonde ou d'extrémité d'un os) est inséré

Quoi qu'il en soit:

« Une différence majeure entre les tuyaux et les prises est que les tuyaux nécessite un processus parent commun pour configurer le canal de communication Une connexion entre les sockets peut être configurée par deux processus sans lien , pouvant éventuellement appartenir à sur des machines différentes. "

+0

LOL, mais ce n'est pas la programmation liée .. – wamp

+2

@VoodooChild: Honte :) –

+1

C'est le problème avec les noms, c'est difficile. Dans le monde Windows, un "tube nommé" ressemble plus à une socket et sert à connecter des clients à des serveurs sur des machines différentes. –

3

(Shamelessly de http://www.perlmonks.org/?node_id=180842 chipé)

Pipes sont rapides et fiables, car ils sont mis en œuvre en mémoire sur un hôte unique où les deux processus de communication fonctionnent. Les sockets sont plus lentes et moins fiables, mais sont beaucoup plus flexibles car ils permettent la communication entre les processus sur différents hôtes.

+1

Les tuyaux permettent également la communication entre différents hôtes. Notez qu'il est marqué [Windows], donc nous parlons de tuyaux Windows, pas de tuyaux Unix ici. –

+0

Peut-on utiliser un tuyau plusieurs fois? Comme dans cet article il me semble qu'un tuyau ne peut être utilisé qu'une fois (sera fermé une fois utilisé): http://msdn.microsoft.com/en-us/library/aa365588%28v=VS.85%29. aspx – wamp

+0

@Jerry - true - une fois que cela se produit (communication inter-machine) y a-t-il une grande différence entre une pipe et une socket, au moins en termes de vitesse? –

1

Les sockets utiliseraient un protocole IP comme TCP/IP ou UDP, ce qui serait plus lent, mais votre code serait plus portable si vous aviez besoin de communiquer sur un réseau. Il y a une troisième approche mem partagée et quatrième ports Mach (dans ce cas je ne suis pas sûr que cela fonctionnerait avec Windows)

-4

Ils ont tous les deux la même fonction, la seule différence est que les tuyaux sont plus efficaces car ils sont les plus proches on peut arriver aux barebones des internets. Les sockets sont une abstraction construite au-dessus d'une série de tubes (pipes), ils sont donc plus lents (tout comme java est plus lent que le code d'assemblage natif).

Questions connexes