在节点中运行后台任务需要多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