tl; dr: Вам необходимо async
, чтобы предотвратить блокировку цикла событий.
NodeJS использует определенное количество потоков для обработки клиентов.В основном существует два типа потоков:
- Цикл событий (или ваш основной поток)
- Рабочий пул (или пул потоков)
Цикл событий:
В основном причина, по которой необходимо асинхронное программирование:
Как только все события зарегистрированы, NodeJS входит в цикл событий и обрабатывает все входящие запросы, а также исходящие ответы.Все они проходят через цикл обработки событий.
Рабочий пул
Как вы уже сказали, NodeJS использует рабочий пул для выполнения операций ввода-вывода и ЦП.
АсинхронныйКод
Чтобы предотвратить блокировку основного потока, необходимо поддерживать чистоту цикла обработки событий и делегировать определенную задачу.Здесь необходим асинхронный код.Таким образом, ваш код становится неблокирующим.Терминология, касающаяся асинхронного и неблокирующего, все же немного расплывчата.Чтобы уточнить:
- Асинхронный код: Параллельно выполняет определенные задачи
- Неблокирование: В основном опрос без блокировки дополнительного кода.
Однако в NodeJS Async часто используется для операций ввода-вывода.Там это не просто означает «работать параллельно», потому что это в основном означает «не блокировать и не получать сигнал».
Итак, чтобы сделать цикл событий NodeJS эффективным, мы не хотим ждать завершения операции.Поэтому вместо этого мы регистрируем асинхронный «слушатель».Это позволяет NodeJS эффективно управлять своими собственными ресурсами.
BlueBird (или Promises в целом):
Библиотеки, такие как BlueBird , которые выупомянутые, больше не требуются, потому что NodeJS поддерживает обещания из коробки (см. примечание здесь ).
Обещания - это просто еще один способ написания асинхронного кода.Так же как и Асинхронные / ожидающие и Функции генератора .
Примечание: функции, определенные с помощью ключевого слова async
, фактически дают обещание.