我最近在 node.js 中创建了一个机器人,但它超级超级重,使用 100% cpu!我使用 node-fetch、async.parallel 和 setInterval,我不确定为什么它使用 100% cpu,可能是因为 setInterval 队列?同上。这是我的代码:
async.parallel({
task1: function () {
setInterval(function () {
let itemRandomizer =
config.generalInfo.itemList[
Math.floor(Math.random() * config.generalInfo.itemList.length)
];
let cookieRandomizer =
randomCookies[Math.floor(Math.random() * randomCookies.length)];
fetch(url, {
method: "GET",
agent,
headers: {
"Content-Type": "application/json",
cookie: `cookie=${cookieRandomizer}`,
},
})
.then((res) => res.json())
.then((json) => {
checks++;
//console.log(checks, itemRandomizer, json.data[0].price)
})
.catch((err) => {});
}, 0);
},
task2: function () {
/* same code as task 1 (total 20 tasks) */
},
});
我不想增加间隔,希望它尽可能快地保持,但是 100% cpu 是不真实的,我不想让它使用那么多,有什么解决办法吗? setInterval 是 CPU 密集型的吗? 线程比 async.parallel 消耗更多的 CPU,所以这就是我不使用线程的原因。
您正在使用延迟为零的 setInterval,因此您基本上是在安排无限任务运行。太疯狂了。您可能想要的是仅在完成一项任务后才开始一项新任务(或者可能开始几项,但在某个时候等到至少一项任务完成)。
顺便说一下,考虑使用像 p-map 这样的东西,这样你就可以轻松地将并发配置为 20 这样的值,而不是尝试基本上重新实现 p-map 已经做的事情。