NodeJS承诺睡眠时间过长



我正在努力提高使用队列处理员工传入消息的性能。

然而,睡眠功能需要16到30毫秒来完成,而不是1毫秒。有没有更好的方法来处理队列,而不需要这么大的延迟,也不需要让我的应用程序保持100%的cpu?

我正在做这样的事情:

var actions = new Queue();
parentPort.on('message', (msg) => actions.enqueue(msg));
loopy();
async function loopy() {
while (true) {
if (actions.size() > 0) {
let action = actions.dequeue();
//do work
continue; 
}
await sleep(1);
}
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

如有任何帮助,我们将不胜感激。谢谢

while(true)(通常(不是一个好主意。您应该在将消息排入队列后调用出列函数。出列函数应在1时结束。已经有一个出列函数在运行2。队列中没有更多消息。

var isProcessing = false;
var actions = new Queue();
parentPort.on('message', (msg) => {
actions.enqueue(msg)
tryDequeue();
});

async function tryDequeue() {
if(isProcessing || actions.size() == 0)
{
return;
}
isProcessing = true;
let action = actions.dequeue();
//do work

isProcessing = false;
tryDequeue();
}

最新更新