Назад к вопросам
Middle+
4
Знакомы ли вы с механизмом backpressure в стримах?
Компании, где спрашивали
Ifellow
Ответ от нейросети
sobes.tech AI
Backpressure в стримах — это механизм управления потоком данных, который позволяет предотвратить переполнение буфера при слишком быстрой генерации данных по сравнению со скоростью их потребления.
В Node.js, например, если writable stream не успевает обработать входящие данные, он сигнализирует об этом, возвращая false из метода write(). В этот момент источник должен приостановить отправку данных до события drain, которое означает, что поток готов принять новые данные.
Пример:
const { Writable } = require('stream');
const writable = new Writable({
write(chunk, encoding, callback) {
// имитация асинхронной записи
setTimeout(() => {
console.log(chunk.toString());
callback();
}, 100);
}
});
let i = 0;
function writeData() {
let canWrite = true;
while (i < 10 && canWrite) {
canWrite = writable.write(`Chunk ${i}\n`);
i++;
}
if (i < 10) {
writable.once('drain', writeData);
}
}
writeData();
Таким образом, backpressure помогает сбалансировать скорость производства и потребления данных, предотвращая потерю или переполнение данных.