node:event-loop & 宏任务 & 微任务

event-loop(事件轮询)

代码进入执行栈后会判断当前代码是同步任务仍是异步任务,若是是同步任务则会将任务调到主线程同步执行,若是是异步任务则会将任务调到异步队列中。ajax

主线程同步任务执行完毕后,会检测异步队列中是否存在异步任务:异步

  1. 若存在异步任务则先检测是否有定时器任务,若是有并时间到则执行定时器异步任务;
  2. 若不存在定时器任务或定时器时间未到则检测是否存在io异步任务,如文件读写,ajax请求等。若存在则执行io异步任务;
  3. 若不存在io异步任务或已执行完毕io异步任务,则检测是否存在setImmediate异步任务,若存在则执行该异步任务;
  4. 1,2,3条结束后从新判断异步队列中是否还存在未执行的异步任务,若存在,则从第一条开始检测执行,若异步队列未空,则结束。

宏任务 & 微任务

主线程中执行的同步任务又分宏任务与微任务。函数

宏任务包含:oop

  • 主体script代码
  • setTimeout,setInterval函数
  • Promise

微任务包含:线程

  • Promise对象的then处理
  • process.nextTick

当同步任务中既包含宏任务又包含微任务的时候,执行顺序是先执行宏任务,再执行微任务。对象

相关文章
相关标签/搜索