在节点中运行后台任务需要什么?

时间:2016-04-13 04:52:32

标签: node.js background-process kue

如果我理解的是正确的,处理后台任务是释放cpu绑定任务主线程的好方法。

我没有得到的是像bull或kue这样的系统用来从主线程中运行任务的东西。

他们使用线程吗?他们需要整个节点进程分叉吗?它们会产生子进程吗?

2 个答案:

答案 0 :(得分:1)

Bull基于Redis,它在自己的流程中处理这些作业的数据处理和排​​队。 它是一个轻量级,健壮且快速的作业处理队列。它使用 redis 进行持久化,因此如果服务器因任何原因出现故障,队列不会丢失。

可以看到作业的内部实施here

Kue模块也是如此,它是由redis进程支持的优先级作业队列,为node.js构建。后台任务由Redis提供支持。

这意味着这些模块依赖于可以启用不同创建后台作业的Redis外部进程。

通过Redis pubsub:

在Job实例上触发特定于作业的事件
  • enqueue工作现已排队
  • promotion工作从延迟状态升级到排队
  • progress工作进度从0到100
  • failed attempt作业失败了,但还有其他尝试
  • failed作业失败并且没有剩余尝试
  • complete工作已经完成
  • remove工作已被删除

延迟作业由Redis Queue提供支持,Redis Queue通知/触发模块中的回调。

答案 1 :(得分:0)

这不是node.js的工作方式。 Node.js在内部使用事件循环来处理请求(从而使其成为事件驱动的框架)

整个事件循环在单个线程中运行。执行长时间运行的命令(例如I / O或网络操作)时,请求将排入循环,并且进程不会阻塞。操作完成后,它会在您的代码中触发回调

Event Loop