据我了解默认情况下的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
经过更多研究后,浏览器在同一主机上具有连接限制,一旦在不同的浏览器上进行测试,就不再存在阻塞。
答案 0 :(得分:-1)
您有2个选择
对线程的小而重要的说明:与进程不同,当前不支持传输句柄(例如网络套接字)。