承诺的 NodeJS 睡眠时间太长

NodeJS sleep with promise takes too long

我正在尝试提高使用队列处理工作人员传入消息的性能。

但是,睡眠功能需要 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();
}