PassFront
  1. PassFront
  2. База знаний
  3. Потоки и буферы

Что такое backpressure в потоках и как с ним работать?

Потоки и буферы

Backpressure (противодавление) — ситуация, когда источник читает быстрее, чем приёмник успевает записывать, и данные копятся в памяти.

Как это проявляется

Метод writable.write(chunk) возвращает false, когда внутренний буфер заполнен (порог задаёт highWaterMark). Это сигнал остановить чтение до события drain.

Ручная обработка

readable.on('data', (chunk) => {
  if (!writable.write(chunk)) {
    readable.pause();
    writable.once('drain', () => readable.resume());
  }
});

Правильный способ

pipe() и особенно stream.pipeline() делают это автоматически: ставят источник на паузу и возобновляют его, а ещё пробрасывают ошибки и закрывают потоки.

Что бывает без контроля

Рост использования памяти, падение процесса по OOM и задержки, когда медленный клиент скачивает большой файл.

Коротко для собеседования

Backpressure — механизм защиты от переполнения буфера. Следите за возвратом write() и событием drain либо используйте pipeline.

Другие вопросы раздела