Chuck's Academy

Streaming y Buffering en Node

Contrapresión (Backpressure) en Streams de Node.js

¿Qué es la Contrapresión?

La contrapresión (backpressure) es un concepto crucial en el manejo de streams, que se refiere a la situación donde el writable stream no puede manejar la velocidad a la que un readable stream está enviando datos. La contrapresión ayuda a evitar la sobrecarga de memoria y mantener el flujo de datos equilibrado entre el productor (readable stream) y el consumidor (writable stream).

Cómo Funciona la Contrapresión en Node.js

En Node.js, los streams manejan la contrapresión de manera automática. Si un writable stream no puede escribir datos tan rápido como los recibe, se pausa el readable stream hasta que el writable stream pueda procesar más datos.

Ejemplo de Contrapresión en Streams

A continuación se muestra un ejemplo donde un readable stream intenta enviar datos más rápido de lo que un writable stream puede manejar.

javascript

En este ejemplo, FastReadable produce datos muy rápidamente, mientras que SlowWritable simula un proceso de escritura lento. La contrapresión se maneja automáticamente, pausando FastReadable cuando SlowWritable está ocupado.

Control Manual de Contrapresión

Además del manejo automático, también puedes gestionar la contrapresión manualmente verificando el retorno del método write del writable stream.

javascript

En este ejemplo, customReadable pausa la producción de datos si customWritable no puede manejar más datos (write devuelve false) y se reanuda cuando el evento drain es emitido.

Resumen

La contrapresión es una característica esencial para mantener la eficiencia y estabilidad del flujo de datos en sistemas basados en streams. Comprender y manejar la contrapresión te permitirá crear aplicaciones escalables y eficientes en Node.js.

Diagrama de ContrapresiónDiagrama de Contrapresión


Pregúntame lo que sea