GNU/Linux >> Tutoriales Linux >  >> Linux

¿Las tuberías de Unix/Linux están impulsadas por el productor o por el consumidor?

Las tuberías en Unix tienen un búfer, por lo que incluso si el proceso del lado derecho (RSP) no consume ningún dato, el proceso del lado izquierdo (LSP) puede producir algunos kilobytes antes de bloquearse.

Luego, si el búfer se llena, el LSP finalmente se bloquea. Cuando el RSP lee datos, libera parte o todo el espacio del búfer y el LSP reanuda la operación.

Si en lugar de 2 procesos tienes 3, la situación es más o menos la misma:un productor más rápido es bloqueado por un consumidor más lento. Y obviamente, un consumidor más rápido es bloqueado por un productor más lento si la tubería se vacía:solo piense en un shell interactivo, esperando al productor más lento de todos:el usuario.

Por ejemplo, el siguiente comando:

$ yes | cat | more

Desde more bloquea cuando la pantalla está llena, hasta que el usuario presiona una tecla, el cat El proceso llenará su búfer de salida y se detendrá, luego el yes El proceso llenará su búfer y también se detendrá. Todo a la espera de que el usuario continúe, como debe ser.

PD:Como dato interesante es:¿qué sucede cuando el more termina el proceso? bueno, el lado derecho de esa tubería está cerrado, entonces el cat el proceso obtendrá un SIGPIPE señal (si alguna vez vuelve a escribir en la tubería, y lo hará) y morirá. Lo mismo pasará con el yes proceso. Todos los procesos mueren, como debe ser.


A tiene una tubería hacia B y B tiene una tubería hacia C. Cada tubería tiene un amortiguador; B y C se bloquean si intentan leer y no hay ninguna entrada disponible (el final del flujo cuenta como entrada). A y B se bloquean si tienen salida para escribir, pero el búfer de la tubería está lleno.

Los tres procesos se ejecutan simultáneamente, utilizando la mayor cantidad de CPU posible. El sistema operativo los bloquea en la llamada al sistema de lectura/escritura según sea necesario si el búfer de tubería está agotado/lleno respectivamente.

Por lo tanto, están impulsados ​​tanto por el consumidor como por el productor, es decir, la tasa es la mínima tanto de la tasa de consumo como de la tasa de producción. Si el consumidor es más rápido, el rendimiento lo impulsa el productor y vv.


Linux
  1. Procesos UNIX/Linux:Función C fork()

  2. UNIX/Linux:¿Qué es un shell? ¿Cuáles son las diferentes conchas?

  3. Uso máximo de memoria de un proceso Linux/Unix

  4. ¿Linux es un Unix?

  5. ¿Los hilos del kernel de Linux son realmente procesos del kernel?

Comunicación entre procesos en Linux:uso de conductos y colas de mensajes

¿Qué son las tuberías en Linux? ¿Cómo funciona la redirección de tuberías?

Linux frente a Unix

UNIX/Linux:7 ejemplos prácticos de comandos PS para el monitoreo de procesos

¿Las variables de entorno son visibles para usuarios sin privilegios en Linux?

¿Los diferentes kernels de Linux/Unix son intercambiables?