承诺的 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();
}
我正在尝试提高使用队列处理工作人员传入消息的性能。
但是,睡眠功能需要 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();
}