Модуль 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 делегирует работу, выполненную операционной системе, сама операционная система решает, создавать ли новую угрозу или нет.Или просто в целом, как обработать весь процесс создания запроса.