乐趣区

关于eventloop:深入理解JavaScript之彻底弄懂JsEventLoop执行机制

JavaScript 单线程起源:

JavaScript 作为浏览器脚本语言,JavaScript 的主要用途是与用户互动,以及操作 DOM,为了防止复杂性,诞生开始,JavaScript 就是单线程语言。
比方,假设 JavaScript 同时有两个线程,一个线程在某个 DOM 节点上增加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?所以,为了防止复杂性,从一诞生,JavaScript 就是单线程。

单线程及存在的问题:

单线程就意味着,所有工作须要排队,前一个工作完结,才会执行后一个工作。如果前一个工作耗时很长,后一个工作就不得不始终等着。

问题的解决 – 同步、异步

synchronous(同步工作)和 asynchronousk(异步工作)

  • 同步工作是 调用立刻失去后果的工作 ,同步工作在 主线程 上排队执行的工作,只有前一个工作执行结束,能力执行后一个工作;
  • 异步工作是 调用无奈立刻失去后果的工作 ,须要额定的操作能力预期后果的工作,异步工作不进入主线程、而进入 ” 工作队列“(task queue)的工作,只有 ” 工作队列 ” 告诉主线程,某个异步工作能够执行了,该工作才会进入主线程执行。

macro-task(宏工作)和 micro-task(微工作)

  • 宏工作:macro-task 能够了解是每次执行栈执行的代码就是一个宏工作(包含每次从事件队列中获取一个事件回调并放到执行栈中执行, 每一个宏工作会从头到尾将这个工作执行结束,不会执行其它)包含整体代码 script,setTimeout,setInterval 等
  • 微工作:micro-task 能够了解是在以后 task 执行完结后立刻执行的工作 包含 Promise,process.nextTick 等
    (未完 …)
退出移动版