Зачем нужно асинхронное программирование в NodeJS? - PullRequest
1 голос
/ 17 мая 2019

У меня проблема с понятием async в NodeJS. Я много читал об опросе в NodeJS. Они говорят такие вещи, как:

Цикл обработки событий - это то, что позволяет Node.js выполнять неблокирующий ввод / вывод операции

или

Узел использует рабочий пул для обработки "дорогих" задач. Это включает Ввод / вывод, для которого операционная система не обеспечивает неблокирование версия, а также особо ресурсоемкие задачи.

или

Это API модуля Node, которые используют этот рабочий пул, например, как файловая система (фс)

Итак, я обнаружил, что Node управляет выполнением операций ввода-вывода с использованием пула потоков. Теперь мой вопрос: если Node управляет ими, зачем нам вообще использовать async programming в NodeJS? И в чем причина некоторых модулей, таких как BlueBird ?

1 Ответ

2 голосов
/ 17 мая 2019

tl; dr: Вам необходимо async, чтобы предотвратить блокировку цикла событий.


NodeJS использует определенное количество потоков для обработки клиентов.В основном существует два типа потоков:

  • Цикл событий (или ваш основной поток)
  • Рабочий пул (или пул потоков)

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

В основном причина, по которой необходимо асинхронное программирование:

Как только все события зарегистрированы, NodeJS входит в цикл событий и обрабатывает все входящие запросы, а также исходящие ответы.Все они проходят через цикл обработки событий.

Рабочий пул

Как вы уже сказали, NodeJS использует рабочий пул для выполнения операций ввода-вывода и ЦП.

АсинхронныйКод

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

  • Асинхронный код: Параллельно выполняет определенные задачи
  • Неблокирование: В основном опрос без блокировки дополнительного кода.

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

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


BlueBird (или Promises в целом):

Библиотеки, такие как BlueBird , которые выупомянутые, больше не требуются, потому что NodeJS поддерживает обещания из коробки (см. примечание здесь ).

Обещания - это просто еще один способ написания асинхронного кода.Так же как и Асинхронные / ожидающие и Функции генератора .

Примечание: функции, определенные с помощью ключевого слова async, фактически дают обещание.

...