Зачем LIBUV нужен в Node JS? - PullRequest
0 голосов
/ 19 мая 2019

Итак, может быть, этот вопрос слишком новичок и новичок, чтобы его задавать, но я до сих пор не понимаю, почему LIBUV получил место в Node JS Architecture? Итак, вот мое понимание архитектуры NodeJ.

  1. Узел Js построен поверх V8
  2. V8 способен запускать код, написанный с стандартами EcmaScript .
  3. V8 написан на C ++.
  4. Так что, если вы хотите дать какую-то новую функциональность, мы можем встроить V8 в наш проект C ++ и присоединить новый код с новым Embedded V8 в C ++.

Теперь вот сомнение,

  1. Поскольку V8 поддерживает EcmaScript Javascript , что означает, что он способен запускать обратные вызовы, написанные в соответствии со стандартами EcmaScript .
  2. Таким образом, мы можем добавить код для доступа к файловой системе, серверу Http и доступа к БД в C ++, поскольку есть библиотеки (файлы заголовков), которые предоставляют эту функциональность, поскольку Java написана на C ++ (поправьте меня, если я ошибаюсь), а Java имеет возможность сделать то же самое.
  3. Теперь, если мы сможем добавить эти функциональные возможности в C ++, где место для Libuv входит в картину архитектуры NodeJ.

Спасибо заранее и Удачного кодирования:)

Ответы [ 2 ]

2 голосов
/ 19 мая 2019

Проверьте документы ниже -

https://nodejs.org/en/docs/meta/topics/dependencies/#libuv

Другая важная зависимость - libuv, библиотека C, которая используется для абстрактные неблокирующие операции ввода-вывода для согласованного интерфейса через все поддерживаемые платформы. Он предоставляет механизмы для управления файловой системой, DNS, сеть, дочерние процессы, каналы, обработка сигналов, опрос и потоковое видео. Он также включает в себя пул потоков для разгрузки работы для некоторых вещи, которые нельзя сделать асинхронно в операционной системе уровень.

Итак, чтобы подвести итог, V8 предоставляет функции, связанные с запуском файлов JS, но для использования системных ресурсов, таких как сеть, файлы и т. Д., Используется libuv. Также предоставляется модель потоков для доступа к упомянутым ресурсам.

0 голосов
/ 11 июня 2019

Модуль libuv несет ответственность за некоторые определенные функции в стандартной библиотеке.для НЕКОТОРЫХ вызовов стандартных функций библиотеки сторона C ++ и libuv решают полностью выполнить дорогостоящие вычисления вне цикла событий. Они создают нечто, называемое пул потоков , этот пул потоков представляет собой серию из четырех потоков, которые могут бытьиспользуется для выполнения сложных вычислительных задач, таких как хеширование.

По умолчанию libuv создает четыре потока в этом пуле потоков.Таким образом, это означает, что в дополнение к этому потоку, используемому для цикла событий, есть четыре других потока, которые можно использовать для разгрузки дорогих вычислений, которые должны выполняться внутри нашего приложения.Многие функции, включенные в стандартную библиотеку узлов, автоматически используют этот пул потоков.

Теперь наличие этого пула потоков очень важно.Очевидно, что Node.js не является однопоточным


Libuv также предоставляет узлам доступ к базовой файловой системе операционной системы, например, к сети.Так как стандартная библиотека узла имеет некоторые функции, использующие пул потоков libuv, она также имеет некоторые функции, использующие код, встроенный в базовую операционную систему через libuv.

Простой запрос Http

const https=require(“https”)
const start=Date.now()
https.request(“https://www.google.com”,res=>{
res.on(“data”,()=>{} ) 
res.on(“end”,()=>{console.log(Date.now()-start)  }) }).end()

Так что в этом случае libuv видит, что мы пытаемся сделать HTTP-запрос.Ни libuv, ни node не имеют кода для обработки всех этих низкоуровневых операций, связанных с сетевым запросом.Вместо этого libuv делегирует выполнение запроса базовой операционной системе.Так что на самом деле наша операционная система выполняет настоящий HTTP-запрос, который Libuv использует для выдачи запроса, а затем просто ждет, пока операционная система выдаст сигнал, что какой-то ответ вернулся на запрос.Поэтому, поскольку Libuv делегирует работу, выполненную операционной системе, сама операционная система решает, создавать ли новую угрозу или нет.Или просто в целом, как обработать весь процесс создания запроса.

...