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高,微任务在每个阶段后执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值