Выбор ответа Middle Потоки и буферы обновлено
Чем pipeline лучше pipe
Вопрос
В цепочке read.pipe(gzip).pipe(write) поток read упал с ошибкой. Что произойдёт?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка не передаётся: gzip и write останутся открытыми. pipe передаёт данные и управляет скоростью, но ошибки не пробрасывает и соседние потоки не уничтожает.
Варианты ответа
- Ошибка не передаётся:
gzipиwriteостанутся открытымиправильный ответ - Ошибка дойдёт до
write, и все потоки цепочки закроются - Node перезапустит чтение с места сбоя через
resume - Процесс сразу завершится с кодом 1 при любом обработчике
error
Разбор
pipe передаёт данные и управляет скоростью, но ошибки не пробрасывает и соседние потоки не уничтожает. Без обработчика error на read процесс упадёт, а с обработчиком останутся висящие потоки и дескрипторы. pipeline закрывает всю цепочку и возвращает ошибку в одном месте.
- Первый вариант описывает как раз
pipeline. - Автоматических повторов в потоках нет.
- Процесс падает только если события
errorникто не слушает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Потоки и буферы»
- Пачки из асинхронного итератора
- Разбиение потока на строки по чанкам
- Запись с учётом backpressure
- Итоги платежей из CSV-выгрузки
- Слияние k отсортированных логов
- Топ эндпоинтов по access-логу с нормализацией маршрутов
- Сессии пользователей по потоку событий
- Код-ревью: выгрузка и загрузка больших файлов