以下是标准代码,将任务添加到队列中,然后工作池将处理这些任务。我感到困惑的是队列中有超过 1 个工作人员意味着什么,因为我不相信这段代码会启动多个 node.js 进程?
var Queue = require('firebase-queue');
var firebase = require('firebase');
firebase.initializeApp({
// propriety data
});
var promise = firebase.auth().signInWithEmailAndPassword(process.env.EMAIL, process.env.PASSWORD);
promise.then(function () {
return createQueue();
}, function (error) {
console.error(error);
});
var queue;
function createQueue() {
var db = firebase.database();
var ref = db.ref('quote-request-queue');
var tasks = db.ref('quote-request-queue/tasks');
tasks.push({'foo': 'bar'});
tasks.push({'foo': 'bar'});
tasks.push({'foo': 'bar'});
const opts = {
};
queue = new Queue(ref, opts, function (data, progress, resolve, reject) {
// Read and process task data
console.log(data);
// Do some work
progress(50);
// Finish the task asynchronously
setTimeout(function () {
resolve();
}, 100);
});
console.log('worker count:', queue.getWorkerCount());
}
我的问题是 - 是否有必要在队列中的下一个项目将由另一个工作人员处理之前调用 resolve()?
我想了解如何让工作人员相互阻塞(为了数据库原子性)以及让工作人员在不同的任务上并行工作。(如果处理功能中发生 I/O,它们将并行/并发工作)。
如何使用 Firebase 控制阻塞/非阻塞工作队列?