Javascript 节点事件循环多线程
我试图理解NodeJs多线程是如何工作的,因为我默认理解NodeJs单线程。我遇到的问题是,当用户A发出http请求时,请求需要10秒,而在用户B发出http请求后,它必须等待第一个请求完成。换句话说,NodeJs正在阻塞事件循环 代码示例: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
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提供动力)等异步引擎的要点——它们能够进行异步请求处理/发送,而不需要多个线程或进程。