Введение

Всем привет, я Мухаммад Талха, старший инженер Flutter, вернулся с новой статьей. В прошлой статье мы оставили разговор о цикле событий.

Если вы не читали эту статью, вы всегда можете найти Жизненный цикл программы NodeJS. Где я обсуждал, как на самом деле работает NodeJS под капотом. Кроме того, я дал обзор и глубокий анализ процедуры его жизненного цикла и некоторые подробности о Цикле событий.

Здесь мы углубимся в асинхронное выполнение NodeJS. Далее мы рассмотрим неблокирующую структуру NodeJS и то, как NodeJS управляет своими асинхронными функциями.

NodeJS и один поток

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

Node — это однопоточный фреймворк, он использует один и только один поток JavaScript на вашем компьютере. У нас может возникнуть вопрос: как же Node управляет этими тысячами запросов одновременно и параллельно?

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

Циклы событий

Циклы событий запускаются, как только запускаются ваши серверы, в основном они автоматически запускаются с вашим сервером Node. Это отвечает за обработку обратных вызовов событий. Итак, все хорошие функции, которые мы в основном добавили до сих пор, можно сказать, цикл событий, отвечающий за запуск этого кода, когда происходит определенное событие.

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

Цикл событий содержит только быстрый завершающий код

Рабочий пул

Этот рабочий пул отвечает за всю тяжелую работу. Работа нашей файловой системы и несколько других длительных операций отправляются в рабочий пул, который также автоматически раскручивается и управляется NodeJS.

Этот рабочий пул полностью отделен от вашего кода JavaScript и работает в разных потоках. Он может запускать несколько потоков и тесно вмешиваться в вашу операционную систему.

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

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

Worker Pool отвечает за тяжелые задачи

Заключение

Это много закулисных вещей, которые приятно знать. Все это встроено в NodeJS. Я по-прежнему, конечно, хочу, чтобы вы понимали, как это работает за кулисами, потому что я считаю, что это поможет вам лучше понять NodeJS.

Теперь в нашей следующей статье мы углубимся в цикл событий. А пока учись, спрашивай, учи, повторяй.