Что нужно для запуска фоновых задач в узле?

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

Чего я не понимаю, так это того, что используют системы типа bull или kue для запуска задач из основного потока.

Они используют темы? Требуется ли им целая ветка процесса узла? Они порождают дочерние процессы?

2 ответа

Решение

В основе Bull лежит Redis, который самостоятельно обрабатывает и обрабатывает данные для этих заданий. Это легкая, надежная и быстрая очередь на обработку заданий. Он использует Redis для сохранения, поэтому очередь не теряется, если сервер отключается по любой причине.

внутреннюю реализацию Иова можно увидеть здесь

То же самое с модулем Kue, который является приоритетной очередью заданий, поддерживаемой процессами redis, созданными для node.js. Фоновые задачи работают на Redis.

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

События, связанные с заданиями, запускаются в экземплярах заданий через Redis pubsub:

  • enqueue работа сейчас в очереди
  • promotion задание переводится из отложенного состояния в очередь
  • progress Прогресс работы от 0 до 100
  • failed attempt задание не выполнено, но есть попытки
  • failed задание не выполнено и не осталось попыток
  • complete работа выполнена
  • remove работа была удалена

Задержанные задания работают от очереди Redis, которая уведомляет / запускает обратные вызовы в модуле.

Это не то, как работает node.js. Node.js внутренне использует цикл обработки событий для обработки запросов (и, таким образом, превращая его в управляемую событиями структуру)

Весь этот цикл событий выполняется в одном потоке. При выполнении длительной команды (такой как ввод-вывод или сетевые операции) запрос помещается в цикл, и процесс не блокируется. Когда операция завершается, она вызывает обратный вызов в вашем коде

Цикл событий

Другие вопросы по тегам