В. Что такое Node.js?
- Это асинхронная среда выполнения JavaScript, управляемая событиями.
В. Что такое операции ввода-вывода?
- Это просто относится к взаимодействиям с системным диском и сетью, которые поддерживаются libuv.
- Например, чтение/запись в файловые системы, выполнение сетевых запросов, взаимодействие с базами данных.
В. Что такое либув?
- Libuv — это мультиплатформенная библиотека C, ориентированная на асинхронный ввод-вывод.
В. Блокировка и неблокировка в Node.js
- Блокировка в javascript Node.js — это совсем другое понятие, чем обычный javascript.
- Node.js, будучи серверным языком, в первую очередь имеет дело с операциями ввода-вывода.
- Следовательно, когда для завершения этих операций ввода-вывода требуется время, выполнение обычного/дополнительного javascript приостанавливается.
- Это происходит из-за того, что цикл обработки событий не может продолжать выполнение JavaScript, пока выполняется операция блокировки (ввод-вывод).
Примечание. Здесь, в Node.js, операции с интенсивным использованием ЦП обычно не называются блокировкой, а ожидание завершения операций ввода-вывода называется блокировкой.
Тогда возникает вопрос, как тогда выполнять операции ввода-вывода как неблокирующие?
Ответ: Не беспокойтесь. Стандартная библиотека Node.js предоставляет асинхронные версии всех методов ввода-вывода (чтение файловой системы, взаимодействие с базой данных, сетевой вызов).
Давайте разберемся с вышеуказанными концепциями через коды.
Сначала мы узнаем, как синхронные операции ввода-вывода блокируют нормальное выполнение?
const fs = require("fs"); const data = fs.readFileSync("/file.md"); // blocks here until file is read
Теперь мы будем выполнять несинхронные операции ввода-вывода, чтобы обеспечить неблокировку
const fs = require("fs"); fs.readFile("/file.md", (err, data) => { if (err) throw err; console.log(data); }); moreWork(); // will run before console.log hence non-blocking of execution
Давайте возьмем пример, давайте рассмотрим случай, когда каждый запрос к веб-серверу занимает 50 мс, и 45 мс из этих 50 мс — это ввод-вывод базы данных, который может выполняться асинхронно. Выбор неблокирующих асинхронных операций освобождает эти 45 мс на запрос для обработки других запросов. Это существенная разница в пропускной способности только за счет использования неблокирующих методов вместо блокирующих.
Асинхронная модель
В. Что такое цикл событий?
Ответ: Это фундаментальная часть архитектуры Node.js, которая обеспечивает неблокирующие асинхронные операции ввода-вывода.
Он планирует и выполняет асинхронные задачи в отдельных стеках.
Он управляет очередью событий, которые используются для запуска обратных вызовов и приложения.
В. Что такое среда выполнения JavaScript?
Среда выполнения JavaScript — это среда, предоставляющая необходимые компоненты для выполнения кода JavaScript. Он включает в себя механизм JavaScript, который интерпретирует и выполняет код JavaScript, а также другие важные функции и API, необходимые для взаимодействия с хост-системой или браузером.
JavaScript — это высокоуровневый интерпретируемый язык программирования, который в основном используется для сценариев на стороне клиента в веб-браузерах. Однако с появлением Node.js JavaScript теперь можно выполнять и на стороне сервера.
Вот две основные среды выполнения JavaScript:
- Среда выполнения JavaScript на основе браузера. В контексте веб-разработки браузер действует как среда выполнения JavaScript. Когда веб-страница с кодом JavaScript загружается в браузер, браузер предоставляет механизм JavaScript (например, V8 для Chrome, SpiderMonkey для Firefox, JavaScriptCore для Safari) для интерпретации и выполнения кода JavaScript. Кроме того, браузер предоставляет объектную модель документа (DOM) и другие API-интерфейсы, которые позволяют коду JavaScript взаимодействовать с содержимым и структурой веб-страницы и управлять ими, обрабатывать события, выполнять HTTP-запросы и многое другое.
- Node.js JavaScript Runtime: Node.js — это серверная среда выполнения JavaScript, построенная на движке Chrome V8 JavaScript. В отличие от браузерного JavaScript, который запускается в контексте веб-страницы, Node.js позволяет выполнять код JavaScript вне браузера, на сервере или в любой среде, поддерживающей Node.js. Node.js предоставляет собственный набор API-интерфейсов, включая доступ к файловой системе, сетевые возможности и многое другое, что позволяет коду JavaScript выполнять различные серверные задачи и операции ввода-вывода.
В обоих случаях среда выполнения JavaScript предоставляет среду выполнения кода JavaScript, а также предлагает доступ к определенным API и функциям, которые позволяют разработчикам создавать динамические интерактивные приложения для Интернета (на основе браузера) или для операций на стороне сервера. (узел.js).