我一直在使用 Bull 在我的节点应用程序中执行后台任务。
https://github.com/OptimalBits/bull
现在该节点本质上是单线程的。 bull 是使用运行节点应用程序的同一线程,还是分叉另一个线程并作为单独的实例运行?
来自大牛快速指南:
进程函数也可以在单独的进程中运行1。这有 几个优点:
- 进程是沙盒的,所以如果它崩溃了,它不会影响 工人。
- 您可以在不影响队列的情况下运行阻塞代码(作业 不会失速)。
- 更好地利用多核 CPU。
- 减少与 redis 的连接。
为了使用此功能,只需使用处理器创建一个单独的文件:
// processor.js
module.exports = function(job){
// Do some heavy work
return Promise.resolve(result);
}
像这样定义处理器:
// Single process:
queue.process('/path/to/my/processor.js');
// You can use concurrency as well:
queue.process(5, '/path/to/my/processor.js');
// and named processors:
queue.process('my processor', 5, '/path/to/my/processor.js');
1。这表明,bull 自然不会创建单独的执行过程。
不,它不会在工作线程中运行,而是在主线程中运行,因此建议不要在作业中使用阻塞代码。