Что нужно для запуска фоновых задач в узле?
Если то, что я понимаю, правильно, обработка фоновых задач - это хороший способ освободить основной поток задач, связанных с процессором.
Чего я не понимаю, так это того, что используют системы типа bull или kue для запуска задач из основного потока.
Они используют темы? Требуется ли им целая ветка процесса узла? Они порождают дочерние процессы?
2 ответа
В основе Bull лежит Redis, который самостоятельно обрабатывает и обрабатывает данные для этих заданий. Это легкая, надежная и быстрая очередь на обработку заданий. Он использует Redis для сохранения, поэтому очередь не теряется, если сервер отключается по любой причине.
внутреннюю реализацию Иова можно увидеть здесь
То же самое с модулем Kue, который является приоритетной очередью заданий, поддерживаемой процессами redis, созданными для node.js. Фоновые задачи работают на Redis.
Это означает, что эти модули зависят от внешнего процесса Redis, который позволяет по-разному создавать фоновые задания.
События, связанные с заданиями, запускаются в экземплярах заданий через Redis pubsub:
enqueue
работа сейчас в очередиpromotion
задание переводится из отложенного состояния в очередьprogress
Прогресс работы от 0 до 100failed attempt
задание не выполнено, но есть попыткиfailed
задание не выполнено и не осталось попытокcomplete
работа выполненаremove
работа была удалена
Задержанные задания работают от очереди Redis, которая уведомляет / запускает обратные вызовы в модуле.
Это не то, как работает node.js. Node.js внутренне использует цикл обработки событий для обработки запросов (и, таким образом, превращая его в управляемую событиями структуру)
Весь этот цикл событий выполняется в одном потоке. При выполнении длительной команды (такой как ввод-вывод или сетевые операции) запрос помещается в цикл, и процесс не блокируется. Когда операция завершается, она вызывает обратный вызов в вашем коде