Прежде всего, давайте познакомимся с основами, что такое NodeJS?

Nodejs - это среда выполнения JavaScript, построенная на движке JavaScript V8.

что такое V8?

V8 - это высокопроизводительный движок JavaScript и веб-сборки Google с открытым исходным кодом, написанный на C ++.

Что такое блокирующие запросы ввода-вывода?

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

Что подразумевается под однопоточным?

Помните, что среда выполнения JavaScript имеет один поток, который также известен как цикл событий (также известный как основной цикл, основной поток, поток событий). Это означает, что среда выполнения JavaScript может делать что-то одно за раз. (на заметку - ›среда выполнения JavaScript).

Что такое обратный звонок?

Обратный вызов - это функция, вызываемая по завершении данной задачи.

Table.find({<some conditions here>},function(err,res){
 if(err)
  throw err;
 console.log('OK');
 console.log('I am part of callback function');
});
console.log("I will be printed first");

Я объясню вам, используя этот пример,

Предположим, что в вашей базе данных есть таблица с именем Table, и вы хотите получить из нее данные, поэтому используется метод find (). теперь, когда вы запустите этот код, последняя строка будет выполнена раньше, строка «console.log (‘ OK ’);», но почему? Давайте разберемся:

функция, имеющая параметры как (err, res), работает как функция обратного вызова (позвоните мне через некоторое время), это означает, что она будет вызываться после выполнения Table.find ().

Но почему последняя строка выполняется перед функцией обратного вызова?

ЭТО ПРИМЕТ БОЛЬШЕ ВНИМАНИЯ:

Сейчас я добавлю в него больше,

Узел имеет два типа потоков: 1. Цикл событий 2. k рабочих (Worker Pool).

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

Цикл событий - это тот, кто отвечает за обратные вызовы JavaScript и неблокирующий ввод-вывод.

Рабочий отвечает за асинхронный запрос, включая блокировку операций ввода-вывода и интенсивную работу ЦП.

Означает, что основной поток (или цикл событий) будет обрабатывать обратные вызовы и неблокирующий ввод-вывод и будет выполнять оркестровку.

Как я уже сказал, среда выполнения JavaScript является однопоточной, что означает, что у нее есть только один стек вызовов.

Если мы переходим в функцию, мы помещаем что-то в стек, если мы возвращаемся из функции, мы выскакиваем из вершины стека.

Теперь рассмотрим три вещи: стек вызовов, очередь задач (или очередь обратных вызовов) и веб-API (или k worker).

Теперь перейдем к приведенному выше коду:

Стек вызовов будет запущен с помощью метода find () с обратным вызовом, но поскольку это задача блокирующего ввода-вывода, она будет передана веб-API или любому рабочему из «k рабочих», и этот рабочий выполнит его, и вернет обратный вызов, этот обратный вызов будет помещен в очередь обратного вызова.

пока метод find () выполняется в разделе веб-API, единственный поток (цикл событий) достигнет последней строки, которая является неблокирующим вводом-выводом, и выполнит ее. следовательно, последняя строка будет выполнена перед обратным вызовом.

Теперь на сцену выходит третье задание цикла событий,

Третье задание цикла обработки событий - посмотреть на стек и посмотреть на очередь, если стек пуст, он берет первый элемент очереди и помещает его в стек.

Затем он поместит функцию обратного вызова (err, res) в стек (когда он будет пуст), после чего будет напечатано сообщение «Я являюсь частью функции обратного вызова».

Спасибо за ваше время, любое предложение будет высоко оценено.