美文网首页
JavaScript运行机制详解:再谈Evemt

JavaScript运行机制详解:再谈Evemt

作者: _贺瑞丰 | 来源:发表于2018-08-22 20:59 被阅读16次

    1.why 单线程?

    • JavaScript目的是与用户互动+操作DOM,非单线程带来复杂同步问题;EXAMPLE:有两个线程 一个在DOM节点上添加内容,另外一个又在删除这个点。浏览器听谁的?
    • 新标准 HTML5提出web worker标准,允许JavaScript创建多线程,但是子线程完全受主线程控制,且不得操作DOM。没有改变其本质。
    • 弊端 单线程运行那后面的排着等你。

    2. 任务队列

    很多时候IO(乌龟)限制CPU(兔子)的发挥。
    所以把IO里面的任务?

    将任务分成同步与异步。

    • 同步:主线程上排队进行的任务。按序执行。
    • 异步:不进入主线程、而进入任务队列的任务。只有去通知主线程某个异步任务可执行了,该任务才会进入主线程执行。
    • 同步执行
    image.png
    • 异步执行
      image.png
      上图主线程的绿色部分,还是表示运行时间,而橙色部分表示空闲时间。每当遇到I/O的时候,主线程就让Event Loop线程去通知相应的I/O程序,然后接着往后运行,所以不存在红色的等待时间。等到I/O程序完成操作,Event Loop线程再把结果返回主线程。主线程就调用事先设定的回调函数,完成整个任务。
      可以看到,由于多出了橙色的空闲时间,所以主线程得以运行更多的任务,这就提高了效率。这种运行方式称为”异步模式“(asynchronous I/O)。

    相关文章

      网友评论

          本文标题:JavaScript运行机制详解:再谈Evemt

          本文链接:https://www.haomeiwen.com/subject/ekcmjxtx.html