EventLoop 宏任务与微任务

560 阅读1分钟

EventLoop

1. JavaScript 是单线程的语言

JavaScript 是一门单线程执行的编程语言。也就是说,同一时间只能做一件事情。

单线程执行任务队列的问题: 如果前一个任务非常耗时,则后续的任务就不得不一直等待,从而导致程序假死的问题

2. 同步任务和异步任务

为了防止某个耗时任务导致程序假死的问题,JavaScript 把待执行的任务分为了两类:

(1)同步任务(synchronous)

  • 又叫做非耗时任务,指的是在主线程上排队执行的那些任务

  • 只有前一个任务执行完毕,才能执行后一个任务

(2)异步任务(asynchronous)

  • 又叫做耗时任务,异步任务由 JavaScript 委托给宿主环境进行执行

  • 当异步任务执行完成后,会通知 JavaScript 主线程执行异步任务的回调函数

3.EventLoop 的基本概念

JavaScript 主线程从“任务队列”中读取异步任务的回调函数,放到执行栈中依次执行。这个过程是循环不断的,所以整个的这种运行机制又称为 EventLoop(事件循环)。

宏任务和微任务

1. 什么是宏任务和微任务

JavaScript 把异步任务又做了进一步的划分,异步任务又分为两类,分别是:

(1)宏任务(macrotask)

  • 异步 Ajax 请求、

  • setTimeout、setInterval、

  • 文件操作

  • 其它宏任务

(2) 微任务(microtask)

  • Promise.then、.catch 和 .finally

  • process.nextTick

  • 其它微任务