0%

macro tasks 和 micro tasks 学习

今天看了一篇有关macro和micro任务的文章,记录一下学习所获。
文章地址 Tasks, microtasks, queues and schedules

首先感受一下代码

6
1
2
3
4
5
6
7
8
9
10
11
console.log('start')
setTimeout(()=>{
console.log('sto');
},0)

new Promise().then(()=>{
console.log('promise 1');
}).then(()=>{
console.log('promise 2');
})
console.log('end')

上面这段代码的打印顺序为

start,end,promise1,promise2,sto

为什么会这样呢?这里需要我们理解事件循环是如何处理macro tasksmicor tasks 的。

每一个线程都有自己的事件循环,这样每个线程能够独立,所有的同源窗口共享同一个事件循环,这样它们就能够同步通信。

一个事件循环存在多个事件源,这样按照不同任务源的优先级执行,确保了任务源的执行顺序。

前面刚复习过 Promise,立即 resolvePromise 在本次事件循环的末尾执行。

macro 和 micro 区别

promise 为什么是 micro