Выбор ответа Middle Потоки и буферы обновлено

Чем pipeline лучше pipe

Вопрос

В цепочке read.pipe(gzip).pipe(write) поток read упал с ошибкой. Что произойдёт?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Ошибка не передаётся: gzip и write останутся открытыми. pipe передаёт данные и управляет скоростью, но ошибки не пробрасывает и соседние потоки не уничтожает.

Варианты ответа

  1. Ошибка не передаётся: gzip и write останутся открытымиправильный ответ
  2. Ошибка дойдёт до write, и все потоки цепочки закроются
  3. Node перезапустит чтение с места сбоя через resume
  4. Процесс сразу завершится с кодом 1 при любом обработчике error

Разбор

pipe передаёт данные и управляет скоростью, но ошибки не пробрасывает и соседние потоки не уничтожает. Без обработчика error на read процесс упадёт, а с обработчиком останутся висящие потоки и дескрипторы. pipeline закрывает всю цепочку и возвращает ошибку в одном месте.

  • Первый вариант описывает как раз pipeline.
  • Автоматических повторов в потоках нет.
  • Процесс падает только если события error никто не слушает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.