区别

time 10s
node10以下版本,不是执行宏任务就清空队列,是每切换一个阶段才会清空微任务,比如times->checks是一个阶段
node11以上版本,是每执行一个宏任务都会清空一次微任务队列,切换也清空微任务队列

每执行一个阶段都要清空这个阶段所有的任务,但如果是setTimeout新加入的,不会像promise.then链式调用一样,因为setTimeout需要等待才能有结果,才能有cb,所以没有链式调用

poll监听timers是否完成,返没返回cb,返回了就来到timers

举例子

time 21m47s

其实是plus->事件队列->(线程)——事件环
cb不是宏任务、微任务,是setTimeout是宏任务,setTimeout是宏任务,在别的线程中运行,不占有主线程运行,主线程继续运行,别的线程得到结果,setTimeout中的回调函数交给主线程运行。readFile在别的线程运行,别的线程得到结果,文本的内容等,告诉主线程我执行好了,主线程停下别的活,得到readFile线程的结果与回调函数,主线程再去执行,是主线程是单线程,但有别的辅助线程,帮忙处理任务,加工。

plus在这里是同步任务,当成模拟成异步任务对待
image.png

image.png

image.png