为什么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/1http://localhost:8080/2在两个选项卡中再次花费10秒。

以上是 为什么settimeout会阻塞eventloop 的全部内容, 来源链接: utcz.com/qa/426902.html

回到顶部