Sobes.tech
Назад к вопросам
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 помогает сбалансировать скорость производства и потребления данных, предотвращая потерю или переполнение данных.