Что такое No-Buffering особенность Node.js
Везде упоминается, что Node.js не имеет функции буферизации. Например, из Tutorials Point:
Без буферизации - приложения Node.js никогда не буферизуют данные. Эти приложения просто выводят данные кусками.
Но что это значит? Node.js имеет класс Buffer и согласно определению класса Buffer
Чистый JavaScript не очень хорошо обрабатывает прямые двоичные данные, хотя JavaScript поддерживает Unicode. При работе с потоками TCP, чтении и записи в файловую систему необходимо иметь дело с чисто двоичными потоками данных.
Что верно.
Итак, в чем особенностьNo Buffering
"в Node.js?
И как Node.js поддерживает No Buffering? Кто-нибудь может объяснить на примере?
1 ответ
В то время как Node.js позволяет вам работать с потоками данных (т. Е. Порциями), это не обязательно означает, что "Node.js никогда не буферизует данные" - это решать разработчику.
Типичная потоковая передача осуществляется путем создания обратного вызова, который получает данные в течение определенного периода времени, что-то делает с этими данными или передает их другому потоку.
Это означает, что потребитель данных может получить его с большей готовностью, не дожидаясь завершения всей операции.
Это то, к чему уклоняется TutorialPoint, хотя и плохо сказано - и по большей части неверно.
Bufferring на самом деле является ключом к работе с потоковыми данными. В том смысле, что фактические данные будут находиться в буфере, пока ваш обратный вызов не извлечет данные из потока для работы.
Вот почему Node.JS имеет классы и библиотеки Buffer, такие как потоковые буферы, для облегчения доступа к потоковым данным.
Общей проблемой при работе с потоками и буферами является то, что называется: "Обратное давление"
Это когда у вас есть поток данных с источником и потребителем, но из-за проблем с нагрузкой ваши потребители отстают в потреблении данных в достаточно быстром темпе по сравнению со скоростью, с которой производители качают данные в поток.
Это вызывает так называемый эффект "обратного давления" и может привести к выходу системы из строя, если Производители не ограничены в скорости.
Обратное давление имеет отношение к обсуждению, потому что оно вызвано тем, что буфер заполняется быстрее, чем ваш обратный вызов может отправить данные обратно пользователю или другому потоку.
Следовательно, буферизация - на том или ином уровне - необходима для работы Node.js и позволяет обрабатывать непрерывные потоки данных. Вот почему существует класс Buffer, а также потоковые буферы - для облегчения перемещения данных между обратными вызовами.