今天看了一篇有关macro和micro任务的文章,记录一下学习所获。
文章地址 Tasks, microtasks, queues and schedules
首先感受一下代码
1 | console.log('start') |
上面这段代码的打印顺序为
start
,end
,promise1
,promise2
,sto
。
为什么会这样呢?这里需要我们理解事件循环是如何处理macro tasks
和 micor tasks
的。
每一个线程都有自己的事件循环,这样每个线程能够独立,所有的同源窗口共享同一个事件循环,这样它们就能够同步通信。
一个事件循环存在多个事件源,这样按照不同任务源的优先级执行,确保了任务源的执行顺序。
前面刚复习过 Promise
,立即 resolve
的 Promise
在本次事件循环的末尾执行。