¿Qué son y cómo funcionan?
El contexto pasa a ser SQL Server
sql-server
pipe
named-pipes
Brian G
fuente
fuente
Respuestas:
Tanto en sistemas Windows como POSIX, las canalizaciones con nombre proporcionan una forma de comunicación entre procesos entre procesos que se ejecutan en la misma máquina. Lo que las canalizaciones con nombre le brindan es una forma de enviar sus datos sin tener la penalización de rendimiento de involucrar a la pila de red.
Al igual que tiene un servidor que escucha una dirección / puerto IP para las solicitudes entrantes, un servidor también puede configurar una tubería con nombre que puede escuchar las solicitudes. En cualquier caso, el proceso del cliente (o la biblioteca de acceso a la base de datos) 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 una tubería con nombre).
Al configurar canalizaciones con nombre adicionales, puede tener varios servidores de base de datos en ejecución, cada uno con sus propios escuchas de solicitud.
La ventaja de las canalizaciones con nombre es que generalmente es mucho más rápido y libera recursos de pila de red.
- Por cierto, en el mundo de Windows, también puede haber canalizaciones con nombre a máquinas remotas, pero en ese caso, la canalización con nombre se transporta a través de TCP / IP, por lo que perderá rendimiento. Use tuberías con nombre para la comunicación local de la máquina.
fuente
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 un solo lector y un escritor: el escritor escribe y el lector lee, ¿entiendes?
En Windows, lo que se denomina "canalización 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.).
Las canalizaciones con nombre de Unix aparecen como un archivo especial en el sistema de archivos y se puede acceder con comandos normales de E / S de archivos, incluido el shell. Los de Windows no lo hacen, y deben abrirse con una llamada especial del sistema (después de lo cual se comportan principalmente como un controlador 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 "tubo con nombre" win32, siendo bidireccional.
fuente
Tubos de Linux
Mecanismo de comunicación interproceso de First In First Out (FIFO).
Tubos sin nombre
en la línea de comando, representada por un "|" entre dos comandos
Tubos 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, llamada "myPipe", desde la línea de comandos ( página man ):
Para crear una tubería con nombre desde c, donde "nombre de ruta" es el nombre que desea que tenga la tubería y "mode" contiene los permisos que desea que tenga la tubería ( página de manual ):
fuente
tell()
colocar niseek()
en una tubería.De acuerdo con Wikipedia :
fuente
Comparar
a
WC bloqueará hasta
ejecuta
fuente
Las tuberías son una forma de transmitir datos entre aplicaciones. En Linux, uso 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 ese flujo de entrada. No necesita hacerlo.
Una tubería con nombre es solo una forma de engancharse activamente en una tubería existente y aspirar sus datos. Es para situaciones en las que el proveedor no sabe qué clientes se comerán los datos.
fuente
Este es un extracto de Technet (¿no está seguro de por qué la respuesta marcada dice que las canalizaciones con nombre son más rápidas?):
Tuberías con nombre vs. Sockets TCP / IP
En un entorno rápido de red de área local (LAN), los Sockets de Protocolo 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 clientes TCP / IP Sockets y Named Pipes se hace evidente con las redes más lentas, como las redes de área amplia (WAN) o las 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 las canalizaciones con nombre, las comunicaciones de red suelen ser más interactivas. Un par no envía datos hasta que otro par lo solicite utilizando un comando de lectura. Una lectura de red generalmente involucra una serie de mensajes de canalización con nombre antes de comenzar a leer los datos. Estos pueden ser muy costosos en una red lenta y causar tráfico de red excesivo. , que a su vez afecta a otros clientes de la red.
También es importante aclarar si está hablando de tuberías locales o tuberías de red. Si la aplicación del servidor se ejecuta localmente en la computadora que ejecuta una instancia de SQL Server, el protocolo de canalizaciones con nombre local es una opción. Las canalizaciones con nombre locales se ejecutan en modo kernel y son muy rápidas.
Para los sockets TCP / IP, las transmisiones de datos son más optimizadas y tienen menos sobrecarga. Las transmisiones de datos también pueden aprovechar los mecanismos de mejora del rendimiento de los Sockets TCP / IP, tales como ventanas, confirmaciones retrasadas, etc. Esto puede ser muy útil en una red lenta. Dependiendo del tipo de aplicaciones, tales diferencias de rendimiento pueden ser significativas.
Los sockets TCP / IP también admiten una cola de trabajos pendientes. Esto puede proporcionar un efecto de suavizado limitado en comparación con las canalizaciones con nombre que podría provocar errores de ocupado cuando intente conectarse a SQL Server.
En general, se prefiere TCP / IP en una red LAN, WAN o de acceso telefónico lenta, mientras que las canalizaciones 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.
fuente
Comunicación entre procesos (principalmente) para aplicaciones de Windows. Similar al uso de sockets para comunicarse entre aplicaciones en Unix.
MSDN
fuente
Las canalizaciones 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, un script instanciado dos veces en el mismo shell no puede compartir nada a través de las dos instancias. Encontré un uso para las canalizaciones con nombre al codificar un demonio que contiene la función start () y stop (), y quería usar el mismo script para realizar las dos acciones.
Sin canalizaciones con nombre (o cualquier tipo de semáforo), iniciar el script en segundo plano no es un problema. La cuestión es que cuando termina, simplemente no puede acceder a la instancia en segundo plano.
Entonces, cuando desea 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 realmente está ejecutando otra instancia.
La solución fue implementar dos tuberías, una LEER y la otra ESCRIBIR cuando inicies el demonio. Luego haz que, entre sus otras tareas, escuche el tubo READ. Luego, la función Stop () contiene un comando que escribirá un mensaje en la tubería, que será manejado por el script en ejecución en segundo plano que realizará una salida 0. De esta manera, nuestra segunda instancia del mismo script solo tiene una tarea que hacer: dile a la primera instancia que pare.
De esta forma, un solo script puede iniciarse y detenerse.
Por supuesto, tiene diferentes formas de hacerlo activando la parada mediante un toque, por ejemplo. Pero este es agradable e interesante de codificar.
fuente
Las tuberías con nombre son 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, a diferencia de TCP / IP.
fuente