Выбор ответа Middle Потоки и буферы спрашивают часто обновлено
write() вернул false
Вопрос
Что означает false, который вернул writable.write(chunk)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Буфер превысил highWaterMark: ждать события drain. Это сигнал backpressure.
Варианты ответа
- Запись не удалась, чанк потерян и не попал во внутренний буфер
- Буфер превысил highWaterMark: ждать события
drainправильный ответ - Поток закрыт, писать больше нельзя без
cork - Чанк слишком большой, его надо разбить на части
Разбор
Это сигнал backpressure. Чанк принят и лежит в буфере, но буфер уже больше highWaterMark. Если продолжать писать, данные будут копиться в памяти. Правильно остановиться и ждать drain.
- Данные не потеряны.
- Запись в закрытый поток даёт ошибку
ERR_STREAM_WRITE_AFTER_END, а неfalse. - Размер чанка не ограничен
highWaterMark, это лишь порог сигнала.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Потоки и буферы»
- Пачки из асинхронного итератора
- Разбиение потока на строки по чанкам
- Запись с учётом backpressure
- Итоги платежей из CSV-выгрузки
- Слияние k отсортированных логов
- Топ эндпоинтов по access-логу с нормализацией маршрутов
- Сессии пользователей по потоку событий
- Код-ревью: выгрузка и загрузка больших файлов