在节点中运行后台任务需要多less时间?

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

我得不到的是bull或kue这样的系统用来运行主线程的任务。

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

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

Job的内部实现可以在这里看到

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

这意味着这些模块依赖于Redis的外部进程,使不同的创build后台作业成为可能。

通过Redis pubsub在Job实例上触发特定于Job的事件:

  • enqueue工作现在排队
  • promotion工作从延迟状态升级到排队
  • progress从0-100的工作进展
  • failed attempt的工作,但还剩下的尝试
  • failed的工作失败了,没有剩下的尝试
  • complete工作已经完成
  • remove作业已被删除

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

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

整个事件循环在一个线程中运行。 执行长时间运行的命令(如I / O或networking操作)时,请求将被排队到循环,并且进程不会被阻塞。 操作完成后,它会在您的代码中触发callback

事件循环