NODE.JS:node event loop( 事件循环)

  1. 事件循环是指node.js执行非阻塞IO操作

  2. 当node.js启动时会初始化event loop,每一个event loop都会包含如下顺序六个循环阶段:

    • timer阶段:这个阶段执行setTimeout和setInteval的回调函数
    • IO callback阶段:此阶段执行某些系统操作的回调
    • idle, prepare阶段
    • poll阶段:获取新的IO事件,例如操作读取文件等,适当的条件下node将阻塞在这里
    • check阶段:执行setImmediate设定的callback
    • close callback阶段:比如 socket.on(‘close’, callback) 的callback会在这个阶段执行;
  3. poll队列详解:

    • 如果poll队列不为空,event loop会遍历队列并同步执行回调
    • 如果poll队列为空
      • 如果有setImmediate的回调,则event loop将结束poll阶段进入check阶段执行check队列
      • 如果没有setImmediate的回调,event loop将阻塞在该阶段等待回调被加入 poll 队列,并立即执行。
    • 一旦poll队列为空,event loop将检查timers,如果有timers回调,则event loop将绕回timers阶段,并执行timer队列
  4. 随着代码执行,event loop终将进入 poll 阶段,在这个阶段等待 incoming connection, request 等等。但是,只要有被setImmediate()设定了回调,一旦 poll 阶段空闲,那么程序将结束 poll 阶段并进入 check 阶段,而不是继续等待 poll 事件们 (poll events)。

  5. process.nextTick 不属于事件循环的任何一个阶段,它属于该阶段与下阶段之间的过渡, 即本阶段执行结束, 进入下一个阶段前, 所要执行的回调。有给人一种插队的感觉.

  6. 微任务nextTick优先级比Promise高,微任务在每个阶段后执行

你可能感兴趣的:(node.js,javascript,node.js,es6)