2008-10-06 12 views
106

¿Qué son y cómo funcionan?¿Qué son las tuberías con nombre?

Contexto pasa a ser SQL Server

+0

Esta es también una respuesta muy amplia: http://askubuntu.com/questions/449132/why-use-a-named-pipe-instead-of-a-file –

Respuesta

119

Tanto en los sistemas Windows y POSIX,-canalizaciones con nombre proporcionan una forma para la comunicación entre procesos que se produzca entre los procesos que se ejecutan en la misma máquina Lo que los pipes con nombre le brindan es una manera de enviar sus datos sin tener la penalidad de rendimiento de involucrar a la pila de red.

Al igual que tiene un servidor que escucha una dirección IP/puerto para las solicitudes entrantes, un servidor también puede configurar una canalización con nombre que pueda escuchar las solicitudes. En cualquier caso, el proceso del cliente (o la biblioteca de acceso a BD) debe conocer la dirección específica (o el nombre de la tubería) para enviar la solicitud. A menudo, existe un valor predeterminado estándar comúnmente utilizado (al igual que el puerto 80 para HTTP, el servidor SQL usa el puerto 1433 en TCP/IP; \\. \ Pipe \ sql \ query para un conducto con nombre).

Configurando conductos con nombre adicionales, puede tener varios servidores de bases de datos en ejecución, cada uno con sus propios detectores de solicitudes.

La ventaja de los tubos con nombre es que suele ser mucho más rápido y libera recursos de la pila de red.

- BTW, en el mundo de Windows, también puede tener tuberías con nombre en máquinas remotas, pero en ese caso, la tubería con nombre se transporta a través de TCP/IP, por lo que perderá rendimiento. Use conductos con nombre para la comunicación de la máquina local.

+0

¿Cuál es la desventaja? – lindhe

+0

@lindhe Sin operatividad automática en la red. Generalmente es más difícil de establecer en la práctica. Implementación diferente en Windows que en sistemas Unix/Unix. Son geniales, pero no me molestaría a menos que el rendimiento sea obligatorio. – sudo

15

Según Wikipedia:

[...] Un tubo tradicional es "sin nombre", ya que existe de forma anónima y sólo persiste durante el tiempo que el proceso es corriendo. Una tubería con nombre es persistente en el sistema y existe más allá de la duración del proceso y debe ser "desvinculada" o eliminada una vez que ya no se utiliza. Los procesos generalmente se conectan a la tubería nombrada (generalmente aparece como un archivo) para realizar IPC (comunicación entre procesos).

5

Comunicación entre procesos (principalmente) para aplicaciones de Windows. Similar al uso de sockets para comunicarse entre aplicaciones en Unix.

MSDN

+2

Las canalizaciones con nombre apareció en V6 o AT & T Unix alrededor de 1975. – dmckee

+0

¡Doh! Eso es un poco antes que Microsoft. Por lo que sé, no se usan con frecuencia en aplicaciones Unix/Linux. ¿Cierto? – Ken

+0

Algunos de mis códigos los usan. ¿Eso cuenta? – dmckee

5

Las tuberías son una forma de flujo de datos entre aplicaciones. En Linux utilizo esto todo el tiempo para transmitir la salida de un proceso a otro. Esto es anónimo porque la aplicación de destino no tiene idea de dónde proviene esa corriente de entrada. No es necesario.

A llamada La tubería es solo una forma de conectar activamente una tubería existente y aspirar sus datos. Es para situaciones en las que el proveedor no sabe qué clientes comerán los datos.

1

Named pipes es un sistema de Windows para la comunicación entre procesos. En el caso del servidor SQL, si el servidor está en la misma máquina que el cliente, entonces es posible usar canalizaciones con nombre para transferir los datos, en lugar de TCP/IP.

+0

No es solo de Windows, ya que su respuesta lo hace aparecer. Como otros ya han notado, los tubos con nombre han existido desde los años 70 en UNIX, generalmente con la apariencia de ser un archivo especial. Upvoted de todos modos, pero corrige tu respuesta. –

+1

Las tuberías con nombre también funcionan en una red –

7

Compare

echo "test" | wc 

a

mkdnod apipe p 
wc apipe 

wc se bloqueará hasta que

echo "test" > apipe 

ejecuta

19

Tubos Linux
Mecanismo de comunicación interproceso First In First Out (FIFO).

Tubos Sin nombre
En la línea de comandos, representados por un "|" entre dos comandos.

Canalizaciones con nombre
Un archivo especial FIFO. Una vez creado, puede usar la tubería como un archivo normal (abrir, cerrar, escribir, leer, etc.).

Para crear una tubería con nombre, llamado "mypipe", desde la línea de comandos (man page):

mkfifo myPipe 

Para crear una conexión con nombre de c, donde "ruta" es el nombre que le gustaría que el tubo tener y el "modo" contiene los permisos que desea que la tubería tiene (man page):

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

Unix y Windows tienen cosas llamadas "canalizaciones con nombre", pero se comportan de manera diferente. En Unix, una tubería con nombre es una calle de sentido único que generalmente tiene solo un lector y un escritor: el escritor escribe, y el lector lee, ¿lo obtiene?

En Windows, lo que se llama una "tubería con nombre" es un objeto IPC más parecido a un socket TCP: las cosas pueden fluir en ambos sentidos y hay algunos metadatos (Puede obtener las credenciales de la cosa en el otro extremo, etc.) .

Los conductos con nombre de Unix aparecen como un archivo especial en el sistema de archivos y se puede acceder con los comandos de archivos IO normales, incluido el shell. Los de Windows no, y necesitan abrirse con una llamada al sistema especial (después de lo cual se comportan principalmente como un identificador win32 normal).

Aún más confuso, Unix tiene algo llamado "zócalo Unix" o zócalo AF_UNIX, que funciona más como (pero no completamente como) un win32 "named pipe", siendo bidireccional.

3

Las tuberías con nombre en un contexto unix/linux se pueden usar para hacer dos shells diferentes para comunicarse ya que un shell simplemente no puede compartir nada con otro.

Además, una secuencia de comandos instanciada dos veces en el mismo shell no puede compartir nada a través de las dos instancias. Encontré un uso para named pipes al codificar un daemon que contiene la función start() y stop(), y quería usar el mismo script para realizar las dos acciones.

Sin conductos con nombre (o cualquier tipo de semáforo) iniciar el script en segundo plano no es un problema. El caso es que cuando termina no puedes acceder a la instancia en segundo plano.

Así que cuando quiere enviarle el comando de detención simplemente no puede: ejecutar el mismo script sin canalizaciones con nombre y llamar a la función stop() no hará nada ya que en realidad está ejecutando otra instancia.

La solución fue implementar dos tubos, uno LEER y el otro ESCRIBIR cuando inicia el daemon. Luego, haga que él, entre otras tareas, escuche el conducto READ. Luego, la función Stop() contiene un comando que escribirá un mensaje en la tubería, que será manejado por el script de ejecución en segundo plano que realizará una salida 0. De esta manera, nuestra segunda instancia del mismo script solo tiene que hacer una tarea: Dile a la primera instancia que se detenga.

De esta forma, una sola secuencia de comandos puede iniciarse y detenerse.

Por supuesto que tiene diferentes maneras de hacerlo activando la parada mediante un toque, por ejemplo. Pero este es lindo e interesante de codificar.

3

Esta es una exeprt de Technet (así que no sé por qué la respuesta marcada dice canalizaciones con nombre son más rápidos ??):

canalizaciones con nombre vs. Sockets TCP/IP

en un área local rápida el entorno de red (LAN), los protocolos de control de transmisión/Protocolo de Internet (TCP/IP) y los clientes de Canalizaciones con nombre son comparables con respecto al rendimiento. Sin embargo, la diferencia de rendimiento entre los sockets TCP/IP y los clientes de Named Pipes se hace evidente con redes más lentas, como en redes de área extensa (WAN) o redes de acceso telefónico. Esto se debe a las diferentes formas en que los mecanismos de comunicación entre procesos (IPC) se comunican entre pares.

Para canalizaciones con nombre, las comunicaciones de red suelen ser más interactivas. Un par no envía datos hasta que otro par lo solicite usando un comando de lectura. Una lectura de red normalmente implica una serie de mensajes de pipa antes de que empiece a leer los datos. Estos pueden ser muy costosos en una red lenta y causar un tráfico de red excesivo, que a su vez afecta a otros clientes de la red.

También es importante aclarar si se trata de tuberías locales o de red. Si la aplicación del servidor se ejecuta localmente en la computadora que está ejecutando una instancia de SQL Server, el protocolo local de Named Pipes es una opción. Los conductos con nombre locales se ejecutan en modo núcleo y son muy rápidos.

Para tomas TCP/IP, las transmisiones de datos son más sencillas y tienen menos gastos generales. Las transmisiones de datos también pueden aprovechar los mecanismos de mejora del rendimiento de Sockets TCP/IP, como ventanas, reconocimientos retrasados, etc. Esto puede ser muy útil en una red lenta. Dependiendo del tipo de aplicaciones, tales diferencias de rendimiento pueden ser significativas.

Los zócalos TCP/IP también admiten una cola de atascos. Esto puede proporcionar un efecto de suavizado limitado en comparación con los conductos con nombre que podrían provocar errores de ocupado por la tubería cuando intente conectarse a SQL Server.

En general, se prefiere TCP/IP en una LAN, WAN o red de acceso telefónico lenta, mientras que los conductos con nombre pueden ser una mejor opción cuando la velocidad de la red no es el problema, ya que ofrece más funcionalidad, facilidad de uso, y opciones de configuración.

3

canalizaciones con nombre:

  1. canalizaciones con nombre utiliza canales de comunicación (IPC) entre procesos para la comunicación entre servidores eficientes, así como la comunicación de red de área local (LAN).

  2. El protocolo Named Pipes tiene algunas mejoras en SQL Server 2008 que incluyen soporte para tráfico cifrado, pero debido a la sobrecarga excesiva de Named Pipes cuando se conecta a través de redes o firewalls, y el puerto adicional que requiere canalizaciones para ser abierto (445),

  3. En general, es una buena idea dejar el protocolo de Canalizaciones con nombre deshabilitado.
  4. Hay muchas aplicaciones que aprovechan el protocolo de Named Pipes porque fueron diseñadas para implementaciones de redes locales.
  5. Canalizaciones con nombre proporciona acceso fácil a Llamadas a procedimiento remoto (RPC) dentro de un único dominio de seguridad, por lo que es ventajoso para estas aplicaciones.
  6. Si necesita admitir que una de las aplicaciones necesite acceso a (RPC) y SQL Server no está expuesto al tráfico externo, el riesgo de habilitar el protocolo de Canalizaciones con nombre y el punto final correspondiente es mínimo.
  7. Named protocolo de canalizaciones también ofrece beneficios de alto rendimiento cuando se utilizan las aplicaciones de cliente que residen en la misma caja que la base de datos de SQL Server que se está accediendo,
  8. canalizaciones con nombre también pueden facilitar la conectividad de clientes de bases de datos SQL Server remoto o para SQL Server hosts en diferentes máquinas
  9. Canalizaciones con nombre tiene dos propiedades configurables • Habilitado: la propiedad Habilitada funciona igual que el protocolo de memoria compartida. • Nombre de la tubería: El nombre de la tubería especifica la tubería entre procesos en la que SQL Server escuchará. El conducto predeterminado es \. \ Pipe \ sql \ query.

http://saurabhsinhainblogs.blogspot.in/2015/09/what-is-difference-between-tcp-ip-and-Named-Pipes.html

Cuestiones relacionadas