如果我的理解是正确的,处理后台任务是释放主线程 CPU 密集型任务的好方法。
我不明白的是 bull 或 kue 等系统使用什么来从主线程运行任务。
他们使用线程吗?它们是否需要整个 Node 进程分支?它们会生成子进程吗?
最佳答案
公牛基于Redis它在自己的进程中处理这些作业的数据处理和排队。 它是一个轻量级、健壮且快速的作业处理队列。它使用redis进行持久化,因此如果服务器因任何原因宕机,队列也不会丢失。
Job的内部实现可见here
Kue 模块也是如此,它是一个由 Redis 进程支持的优先级作业队列,为 Node.js 构建。后台任务由 Redis 提供支持。
这意味着这些模块依赖于 Redis 外部进程来启用不同的创建后台作业。
特定于作业的事件通过 Redis pubsub 在作业实例上触发:
入队
作业现已排队promotion
作业从延迟状态提升为排队状态progress
作业的进度,范围从 0-100尝试失败
作业已失败,但仍有剩余尝试失败
作业已失败并且没有剩余尝试完成
作业已完成删除
该职位已被删除
延迟的作业由 Redis 队列提供支持,该队列通知/触发模块中的回调。
关于node.js - 在 Node 中运行后台任务需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36588868/