JavaScript运行机制详解:再谈Evemt

1.why 单线程?

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

2. 任务队列

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

将任务分成同步与异步。

  • 同步:主线程上排队进行的任务。按序执行。
  • 异步:不进入主线程、而进入任务队列的任务。只有去通知主线程某个异步任务可执行了,该任务才会进入主线程执行。
  • 同步执行
JavaScript运行机制详解:再谈Evemt_第1张图片
image.png
  • 异步执行
    JavaScript运行机制详解:再谈Evemt_第2张图片
    image.png

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

你可能感兴趣的:(JavaScript运行机制详解:再谈Evemt)