如果我理解的是正确的,处理后台任务是释放cpu绑定任务主线程的好方法。
我没有得到的是像bull或kue这样的系统用来从主线程中运行任务的东西。
他们使用线程吗?他们需要整个节点进程分叉吗?它们会产生子进程吗?
答案 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或网络操作)时,请求将排入循环,并且进程不会阻塞。操作完成后,它会在您的代码中触发回调