Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点事件循环多线程_Javascript_Node.js_Multiprocessing_Cluster Computing - Fatal编程技术网

Javascript 节点事件循环多线程

Javascript 节点事件循环多线程,javascript,node.js,multiprocessing,cluster-computing,Javascript,Node.js,Multiprocessing,Cluster Computing,我试图理解NodeJs多线程是如何工作的,因为我默认理解NodeJs单线程。我遇到的问题是,当用户A发出http请求时,请求需要10秒,而在用户B发出http请求后,它必须等待第一个请求完成。换句话说,NodeJs正在阻塞事件循环 代码示例: const sleep = m => new Promise(r => setTimeout(r, m)); app.get("/api/testing", async (req, res) => { console.l

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

代码示例:

  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");
  });

我尝试过使用集群模块,但它对我不起作用,有没有一种方法可以让它在不阻塞事件循环的情况下工作

更新:

经过进一步研究,浏览器在同一主机上有一个连接限制,一旦在不同的浏览器上进行测试,就不再有阻塞。您有两个选项

  • 线程
  • 进程

  • 对于线程来说,这是一个很小但很重要的提示:与进程不同,当前不支持传输句柄,如网络套接字。

    您的问题没有意义。你面临什么问题?你现在有什么?我不认为节点是这样工作的。Node的功能是处理多个并发请求和连接。问题是请求被阻止,它们不会同时发生@qixd这是否回答了您的问题@Qix它很有帮助,并且部分回答了这个问题,我的问题是Chrome,它在同一个主机上有连接限制,这就是为什么我认为事件循环被阻塞的原因。请不要使用线程或子进程来处理请求。这完全是libuv(为node.js提供动力)等异步引擎的要点——它们能够进行异步请求处理/发送,而不需要多个线程或进程。