Проверяет понимание механизма backpressure в потоках данных и умение управлять нагрузкой при обработке стримов.
Backpressure (обратное давление) — это механизм, который регулирует скорость передачи данных между производителем и потребителем в потоковых системах. Когда потребитель обрабатывает данные медленнее, чем производитель их генерирует, без backpressure данные накапливаются в буфере, что может привести к переполнению памяти и падению приложения. Backpressure позволяет потребителю сообщить производителю: «Стоп, я еще не готов, подожди».
В Node.js стримы (Readable, Writable, Transform) реализуют backpressure автоматически. Когда вы пишете данные в Writable стрим, метод write() возвращает false, если внутренний буфер заполнен. Это сигнал для производителя приостановить запись. Стрим генерирует событие drain, когда буфер освобождается, и можно продолжить запись.
const fs = require('fs');
const readable = fs.createReadStream('large.txt');
const writable = fs.createWriteStream('copy.txt');
readable.on('data', (chunk) => {
const canContinue = writable.write(chunk);
if (!canContinue) {
readable.pause(); // приостанавливаем чтение
}
});
writable.on('drain', () => {
readable.resume(); // возобновляем чтение
});В этом примере, если файл слишком большой, мы не читаем его целиком в память, а обрабатываем по частям, контролируя скорость записи.
Backpressure критически важен в системах, работающих с большими потоками данных: обработка файлов, сетевые запросы, передача данных между микросервисами, стриминг видео или логов. Без него приложение может «упасть» из-за нехватки памяти при высокой нагрузке.
Понимание backpressure необходимо для разработки надежных приложений, работающих с потоками данных. Используйте встроенные механизмы стримов в Node.js или аналогичные паттерны в других языках, чтобы избежать переполнения буферов и обеспечить стабильную работу под нагрузкой.
Уровень
Рейтинг:
4
Сложность:
6
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Node.js Developer в телеграм