为什么settimeout阻塞eventloop
注意:对于那些关于settimeout的post,这不是一个复制的post,这里的关键答案是浏览器devise选项。
我开始研究node.js:一个简单的例子来testingasynchronous:
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")
一个有趣的事情是它在命令lind和curl和浏览器中的行为是不一样的:在Ubuntu 12.10中,我在两个控制台中使用curl localhost:8080,它们在几乎相同的10个响应中响应。
但是,我打开了两个浏览器,几乎同时提出请求,但整个过程花了我20秒?
谢谢。
这是浏览器等待,而不是node.js
如果运行服务器并在两个选项卡中请求http://localhost:8080/
,则需要20秒,因为浏览器在开始第二个请求之前等待第一个请求到同一个url。
如果运行服务器并在两个选项卡中请求http://localhost:8080/1
和http://localhost:8080/2
,则需要10秒。