Что такое 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, а также потоковые буферы - для облегчения перемещения данных между обратными вызовами.

Другие вопросы по тегам