为什么settimeout会阻塞eventloop
注意:这不是有关settimeout的复制文章,此处的关键答案是浏览器设计选项。
我开始研究node.js:一个测试异步的简单示例:
var http=require('http');http.createServer(
function(request, response){
response.writeHead(200);
response.write("Hello, dog is running");
setTimeout(
function(){
response.write("Dog is done");
response.end();
},
10000
);
}
).listen(8080);
console.log("Listen on port 8080")
一件有趣的事情是,在带有curl的lind命令和浏览器中,它的行为是不同的:在Ubuntu 12.10中,我在两个控制台中使用curl
localhost:8080,它们在几乎相同的10个发送中进行响应。
但是,我打开了两个浏览器,几乎同时发出了请求,但是整个过程花了我20秒钟?
谢谢。
回答:
等待浏览器,而不是node.js
如果您运行服务器并http://localhost:8080/
在两个选项卡中进行请求,则将花费20秒,因为浏览器在启动第二个选项之前会先等待第一个对相同URL的请求。
如果您运行服务器并请求,http://localhost:8080/1
并http://localhost:8080/2
在两个选项卡中再次花费10秒。
以上是 为什么settimeout会阻塞eventloop 的全部内容, 来源链接: utcz.com/qa/426902.html