Понимание Event Loop в NodeJS
1. Обзор про NodeJS Event Loop
NodeJS это однопоточное приложение (Single Thread), работает на платформе написанной с помощью C++, данная платформа использует многопоточность (Multi-Thread) для одновременного выполнения заданий.
Изображение ниже иллюстрирует запросы (request) со стороные пользователя, отправленные к серверу NodeJS.
![](https://s1.o7planning.com/web-rs/web-image/ru/arf-1119584-vi.webp)
Каждый запрос (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).
![](https://s1.o7planning.com/web-rs/web-image/ru/arf-1119602-vi.webp)
После того, как обработан запрос, NodeJS вызовет функцию Callback (Зарегистрирован ддля данного запроса) чтобы выполнить его.
![](https://s1.o7planning.com/web-rs/web-image/ru/arf-1119608-vi.webp)
ЗАКЛЮЧЕНИЯ:
Первое базовое заключение: Если каждое подключение к Server открывает поток (Thread), то тратится много объема памяти. Это доказано когда вы сравниваете Apache и Nginx (Два Web Server развертывающие приложения PHP). Apache использовало намного больше памяти, по сравнению с Nginx.
NodeJS похож на Nginx тем, что использует один поток (Single thread) для получения подключений от пользователей, и считает каждый запрос пользователя событием.
Второе базовое заключение: Операции I/O (ввода - вывода) очень ресурсоемкие для системы, поэтому NodeJS строго контролирует использование операций I/O. Поэтому вам нужно использовать только Callback когда вы выполняете задания связанные с I/O.
![](https://s1.o7planning.com/web-rs/web-image/ru/arf-1119629-vi.webp)
В основном, очень много вещей в NodeJS работают параллельно на разных потоках, но они контролируются с помощью NodeJS, например Thread Pool. То что вы написали работает на одном потоке (single thread).
Pуководства NodeJS
- Введение в NodeJs
- Что такое NPM?
- Руководство NodeJS для начинающих
- Установить редактор Atom
- Установите NodeJS в Windows
- Руководство NodeJS Module
- Концепция Callback в NodeJS
- Создание простого HTTP Server с NodeJS
- Понимание Event Loop в NodeJS
- Руководство NodeJS EventEmitter
- Подключиться к базе данных MySQL в NodeJS
Show More