Pregunta

¿Cuáles son las diferencias entre las tuberías en Windows y Linux?

¿Fue útil?

Solución

Una diferencia que conozco es que las canalizaciones con nombre en Linux son entradas reales en el sistema de archivos (lo verá en una lista de directorios, tienen un tipo especial), mientras que en Windows se almacenan en algún repositorio mágico en algún lugar (se accede a todos a través de la ruta " \\. \ pipe \ " ;.

En segundo lugar, en Linux puede simplemente escribir / leer desde tuberías como si fuera cualquier otro archivo, utilizando métodos estándar de E / S de archivos. Mientras que en Windows, debe usar las funciones especiales 'Pipe' que forman parte de la API Win32.

Me gusta más el método de Linux, porque me permite usar tuberías con cualquier aplicación que quiera. Por ejemplo:

mkfifo pipe.wav
decodeMP3 song.mp3 --out pipe.wav &
encodeAVI video.mpeg pipe.wav --out video.avi

Esto me permite canalizar la salida del decodificador de MP3 directamente al decodificador de video, en lugar de tener que decodificar primero todo el MP3 en un archivo WAV en el disco. Es útil si tiene una CPU de doble núcleo, porque entonces está ejecutando ambas operaciones a la vez, para una buena aceleración.

Otros consejos

En Linux (y * ix en general), " todo es un archivo " ;. Puede leer / escribir / buscar tuberías, enchufes y dispositivos sin restricciones, en la medida en que esas operaciones tengan sentido.

Mientras que Windows tiene una arquitectura mucho menos unificada para estos diferentes tipos de objetos. Aunque no podría contarle los detalles, sé que el almacenamiento en búfer de las tuberías es considerablemente diferente entre Windows y Linux, por lo que puede tener dificultades allí.

Además, un uso común de Unix-y de tuberías es fork () un subproceso y luego comunicarse con él a través de una tubería (el padre abre un extremo, el niño abre el otro extremo). Bajo Windows, ese tipo de cosas simplemente no es posible. Los mecanismos de IPC son bastante diferentes.

Ver también el hilo anterior:

¿Qué se llaman tuberías?

Que contiene mi opinión y la de otras personas

Otra diferencia importante

Bajo ventanas

A | B | C 

Hasta que A termine con su salida, B no comienza a leer, lo mismo para C que lee la salida de B

* nix engancha la entrada y la salida juntas para que C pueda leer la salida de B y B pueda leer la salida de A mientras A y B todavía se están ejecutando

El rendimiento es casi el mismo, pero la salida se muestra más rápido con * nix.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top