betacode

Понимание Event Loop в NodeJS

  1. Обзор про NodeJS Event Loop

1. Обзор про NodeJS Event Loop

NodeJS это однопоточное приложение (Single Thread), работает на платформе написанной с помощью C++, данная платформа использует многопоточность (Multi-Thread) для одновременного выполнения заданий.
Изображение ниже иллюстрирует запросы (request) со стороные пользователя, отправленные к серверу NodeJS.
Каждый запрос (request) со стороны пользователя для NodeJS является событием (event), они расположены в Event Queue (Очередь событий). NodeJS испольует принцип FIFO (First In First Out - Первым прибыл, первым обслужен), это значит запросы пришедшие первыми будут обработаны первыми.
Event Loop
Как бесконечный цикл, он передает запросы в Thread Pool (Пул потоков), в то же время каждый запрос будет зарегистрирован функцией Callback. При завершении обработки запроса, соотвествующая функция Callback будет вызвана для выполнения.
Thread Pool
Как программа написанная языком C++, она поддерживает многопоточность (Multi Threads), поэтому здесь запросы будут обработаны на разных потоках. NodeJS так же поддерживает мультипроцессы (Multi Processes), это значит они могут быть выполнены на разных ядрах (Core).
После того, как обработан запрос, NodeJS вызовет функцию Callback (Зарегистрирован ддля данного запроса) чтобы выполнить его.
ЗАКЛЮЧЕНИЯ:
Первое базовое заключение: Если каждое подключение к Server открывает поток (Thread), то тратится много объема памяти. Это доказано когда вы сравниваете Apache и Nginx (Два Web Server развертывающие приложения PHP). Apache использовало намного больше памяти, по сравнению с Nginx.
NodeJS похож на Nginx тем, что использует один поток (Single thread) для получения подключений от пользователей, и считает каждый запрос пользователя событием.
Второе базовое заключение: Операции I/O (ввода - вывода) очень ресурсоемкие для системы, поэтому NodeJS строго контролирует использование операций I/O. Поэтому вам нужно использовать только Callback когда вы выполняете задания связанные с I/O.
В основном, очень много вещей в NodeJS работают параллельно на разных потоках, но они контролируются с помощью NodeJS, например Thread Pool. То что вы написали работает на одном потоке (single thread).