当前位置: 首页 > 面试题库 >

为什么settimeout会阻塞eventloop

毛正浩
2023-03-14
问题内容

注意:这不是有关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秒。



 类似资料:
  • 我正在尝试通过对象读取命令。为了检查输入语法,我使用<code>sc。hasNext()(对于缺少命令的情况)。它已经在很多情况下运行良好,但现在我看到了JavaAPI中描述的“MAY block and wait for Input”的情况。 方法何时阻塞,我如何控制它?有趣的是,在街区前的3个案例中,它工作得非常好。此外,JavaAPI还将描述为检查是否存在另一个Input的正确方法,从而使方

  • 问题内容: 我应该开发一个简单的SFTP。 一切都进行得很好,直到我(在本例中)没有编写全部为止。可以请我解释一下,为什么系统挂在我身上吗? 服务器端: 客户端: 问题答案: 您的循环一直运行到流结束,但是对等方永远不会关闭套接字。该协议似乎要求打开套接字以供其他命令使用,因此您必须调整它的这一部分以包括一个长度字前缀,以便您知道要复制多少字节。 问题不是关于不写所有字节,而是关于阻塞in 。

  • 问题内容: 当用一个简单的块编译以下代码时,Java编译器将产生以下输出(在ASM字节码查看器中查看): 码: 字节码: 在两者之间添加一个块时,我注意到编译器将块复制了 3 次(不再再次发布字节码)。这似乎在类文件中浪费空间。复制似乎也不限于最大指令数(类似于内联的工作方式),因为当我向添加更多调用时,它甚至复制了该块。 但是,我的自定义编译器使用不同的方法编译相同代码的结果在执行时完全相同,但

  • 问题内容: 当用户选择在另一个线程中启动阻止进程的菜单项时,我试图在JavaFX 8应用程序中提供反馈。在我的实际应用程序中,它是文件下载,但是通过示例,我使用最少的代码创建了一个测试用例: 它的工作方式如下:当选择“开始”菜单项时,主菜单文本应立即更改为“正在运行…”,然后应附加“完成!”。经过5秒钟的模拟我的文件下载的睡眠。 实际上发生的是,即使我正在使用,在阻止过程完成 后 , 两个 文本更

  • 本文向大家介绍什么情况下会出现css阻塞?相关面试题,主要包含被问及什么情况下会出现css阻塞?时的应答技巧和注意事项,需要的朋友参考一下 css阻塞: 将html解析为dom tree 将css解析为cssom tree 将 domtree 与cssom tree 合并生成render tree 浏览器依照render tree开始布局 所以 css阻塞过程在于下载css资源以及解析生成csso

  • 本文向大家介绍什么情况下会出现js阻塞?相关面试题,主要包含被问及什么情况下会出现js阻塞?时的应答技巧和注意事项,需要的朋友参考一下 未在script 使用 async delay 属性且不是body的最后一个标签 ajax 使用了同步