节点事件循环多线程

时间:2019-12-17 16:58:18

标签: javascript node.js multiprocessing cluster-computing

据我了解默认情况下的NodeJs单线程,我正在尝试了解NodeJ的多线程如何工作。我遇到的问题是,当用户A发出http请求时,请求需要10秒钟,而在用户B发出http请求后,它必须等待第一个请求完成。换句话说,NodeJ阻止了事件循环。

代码示例:

  const sleep = m => new Promise(r => setTimeout(r, m));

  app.get("/api/testing", async (req, res) => {
    console.log("\n");
    console.log(
      "******************************************************************"
    );
    console.time("Slept for");
    await sleep(10000);
    res.send("success");
    console.timeEnd("Slept for");
    console.log(
      "******************************************************************"
    );
    console.log("\n");
  });

我尝试使用集群模块,但对我而言不起作用,有没有一种方法可以在不阻止事件循环的情况下完成这项工作。

更新

https://stackoverflow.com/a/32269641/9005749

经过更多研究后,浏览器在同一主机上具有连接限制,一旦在不同的浏览器上进行测试,就不再存在阻塞。

1 个答案:

答案 0 :(得分:-1)

您有2个选择

  1. 线程https://nodejs.org/dist/latest-v13.x/docs/api/worker_threads.html
  2. 处理https://nodejs.org/dist/latest-v13.x/docs/api/child_process.html

对线程的小而重要的说明:与进程不同,当前不支持传输句柄(例如网络套接字)。