Skip to content

Latest commit

 

History

History
18 lines (11 loc) · 1.13 KB

README.md

File metadata and controls

18 lines (11 loc) · 1.13 KB

EventLoop

JavaScript 是一个单线程、非阻塞、异步、解释性的脚本语言。

  • 单线程:有且只有一个调用栈、每次只能做一件事。
  • 非阻塞:阻塞指的是顺序执行(即,遇到网络请求这样耗时的代码时,只能请求完后再执行其他操作),而对于网页而言,用户无法接受一旦有网络请求后就无法进行其他操作,所以 javascript 采用非阻塞。
  • 异步:既然存在非阻塞,必然存在异步

EventLoop 就是为了防止主线程阻塞而出现的程序结构,它用于处理主线程和其他进程的通信。

任务队列

一个 EventLoop 中,可以有一个或者多个任务队列,每个队列的运行机制为:

event loop 执行机制

  • 宏任务:执行栈内的代码为一个宏任务,诸如 整体代码、setTimeout, setInterval, I/O, DOM, Ajax 等均可以开启一个执行栈;
  • 微任务:当前宏任务执行结束后开始执行当前轮的微任务,微任务包括:Promise.then, async/await 等。(注意,他们都是 ES6)。