Js运行机制Event Loop

一 JS运行机制:http://www.ruanyifeng.com/blog/2014/10/event-loop.html

JavaScript是单线程运行的(防止多个线程操作DOM,无法判断以哪个线程为准),HTML5提出WebWorker可以创建子线程,该线程完全受控制与主线程,且不能操作DOM(子线程可用于计算复杂数据)。

单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。JavaScript分为同步任务(synchronous)与异步任务(asynchronous)

  • 同步任务在主线程上执行,形成执行栈(execution context stack);
  • 主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
  • 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
  • 主线程不断重复上面的第三步。

二 宏任务与微任务:https://www.jianshu.com/p/bfc3e319a96b

以宏任务和微任务进一步理解js执行机制:

  • 整段代码作为宏任务开始执行,执行过程中宏任务和微任务进入相应的队列中
  • 整段代码执行结束,看微任务队列中是否有任务等待执行,如果有则执行所有的微任务,直到微任务队列中的任务执行完毕,如果没有则继续执行新的宏任务
  • 执行新的宏任务,凡是在执行宏任务过程中遇到微任务都将其推入微任务队列中执行
  • 反复如此直到所有任务全部执行完毕

 

 

 

Js运行机制Event Loop

上一篇:webpack的五个核心概念(入口(Entry)、输出(output)、loader、插件(plugin)、模式(mode))


下一篇:Aspose.Words 使用根据模板标记插入可勾选的复选框 (三)