В. Что такое Node.js?

  1. Это асинхронная среда выполнения JavaScript, управляемая событиями.

В. Что такое операции ввода-вывода?

  1. Это просто относится к взаимодействиям с системным диском и сетью, которые поддерживаются libuv.
  2. Например, чтение/запись в файловые системы, выполнение сетевых запросов, взаимодействие с базами данных.

В. Что такое либув?

  1. Libuv — это мультиплатформенная библиотека C, ориентированная на асинхронный ввод-вывод.

В. Блокировка и неблокировка в Node.js

  1. Блокировка в javascript Node.js — это совсем другое понятие, чем обычный javascript.
  2. Node.js, будучи серверным языком, в первую очередь имеет дело с операциями ввода-вывода.
  3. Следовательно, когда для завершения этих операций ввода-вывода требуется время, выполнение обычного/дополнительного javascript приостанавливается.
  4. Это происходит из-за того, что цикл обработки событий не может продолжать выполнение 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:

  1. Среда выполнения JavaScript на основе браузера. В контексте веб-разработки браузер действует как среда выполнения JavaScript. Когда веб-страница с кодом JavaScript загружается в браузер, браузер предоставляет механизм JavaScript (например, V8 для Chrome, SpiderMonkey для Firefox, JavaScriptCore для Safari) для интерпретации и выполнения кода JavaScript. Кроме того, браузер предоставляет объектную модель документа (DOM) и другие API-интерфейсы, которые позволяют коду JavaScript взаимодействовать с содержимым и структурой веб-страницы и управлять ими, обрабатывать события, выполнять HTTP-запросы и многое другое.
  2. Node.js JavaScript Runtime: Node.js — это серверная среда выполнения JavaScript, построенная на движке Chrome V8 JavaScript. В отличие от браузерного JavaScript, который запускается в контексте веб-страницы, Node.js позволяет выполнять код JavaScript вне браузера, на сервере или в любой среде, поддерживающей Node.js. Node.js предоставляет собственный набор API-интерфейсов, включая доступ к файловой системе, сетевые возможности и многое другое, что позволяет коду JavaScript выполнять различные серверные задачи и операции ввода-вывода.

В обоих случаях среда выполнения JavaScript предоставляет среду выполнения кода JavaScript, а также предлагает доступ к определенным API и функциям, которые позволяют разработчикам создавать динамические интерактивные приложения для Интернета (на основе браузера) или для операций на стороне сервера. (узел.js).

Ресурсы

  1. https://github.com/jimuyouyou/node-interview-questions
  2. https://github.com/Devinterview-io/nodejs-interview-questions
  3. https://www.builder.io/blog/visual-guide-to-nodejs-event-loop