美文网首页
[转载]Event Loop

[转载]Event Loop

作者: 你喜欢吃青椒吗_c744 | 来源:发表于2019-08-11 20:28 被阅读0次

前言

Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。

为啥要弄懂Event Loop

  • 是要增加自己技术的深度,也就是懂得JavaScript的运行机制。

  • 现在在前端领域各种技术层出不穷,掌握底层原理,可以让自己以不变,应万变。

  • 应对各大互联网公司的面试,懂其原理,题目任其发挥。

事件循环

image.png image.png
  • 浏览器分析JavaScript,如果是同步,则放入执行栈(stack)。
  • 如果是异步,放入任务队列(callback queue)中。
  • 当执行栈中的任务执行完之后,会去任务队列中看有没有任务,有则压入执行栈中。
  • 不断重复上面的步骤,叫做事件循环。

异步任务内部如何顺序执行

JavaScript中,异步任务被分为两种,一种宏任务(MacroTask)也叫Task,一种叫微任务(MicroTask)。

微任务会比宏任务先执行

  • 宏观任务
    宿主发起的任务为宏观任务,如setTimeout、setInterval、setImmediate,I/O
  • 微观任务
    JavaScript引擎发起的任务为微观任务,如Promise

每个宏观任务中又包含一个微观任务队列。setTimeout等宿主API,会添加宏观任务,Promise永远在队列尾部添加微观任务。

image.png

分析异步执行的方法

  • 执行栈在执行完同步任务后,查看执行栈是否为空。
  • 如果执行栈为空,就会去检查微任务(microTask)队列是否为空,微任务有任务就执行任务。如果微任务为空的话,就执行Task(宏任务)。
  • 每次单个宏任务执行完毕后,检查微任务(microTask)队列是否为空,如果不为空的话,会按照先入先出的规则全部执行完微任务(microTask)后,设置微任务(microTask)队列为null,然后再执行宏任务,如此循环。

事件循环全过程

image.png

参考文章

深入理解javascript中的事件循环event-loop

JS事件循环

JavaScript 事件循环机制

一次弄懂Event Loop(彻底解决此类面试问题)

参考文章:宏观任务与微观任务

相关文章

网友评论

      本文标题:[转载]Event Loop

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