setInterval 任务消耗太多 CPU

问题描述 投票:0回答:1

我最近在 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,所以这就是我不使用线程的原因。

javascript node.js asynchronous cpu intervals
1个回答
1
投票

您正在使用延迟为零的 setInterval,因此您基本上是在安排无限任务运行。太疯狂了。您可能想要的是仅在完成一项任务后才开始一项新任务(或者可能开始几项,但在某个时候等到至少一项任务完成)。

顺便说一下,考虑使用像 p-map 这样的东西,这样你就可以轻松地将并发配置为 20 这样的值,而不是尝试基本上重新实现 p-map 已经做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.