Что такое 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.