node.js 中的Event Loop的6个阶段

node.js 中的Event Loop的6个阶段

  • 1.timers:执行setTimeout() 和setInterview() 中到期的callbacks;
  • 2.I/O callbacks: 上一轮循环中在poll阶段有少数的I/O callback,会被延迟到这一轮的这一阶段执行;
  • 3.idle,prepare:仅内部使用;
  • 4.poll:最为重要的阶段,执行I/O callback ,在适当的条件下会阻塞在这个阶段;
  • 5.check:执行setImmediate的callback;
  • 6.close callback: 执行close事件的callback,例如:socket.on('close',func);

node.js 中的event loop 每一次循环都要执行这6个阶段。每个阶段都有自己的callback队列,每当进入某个阶段,都会从所属的队列中取出callback来执行,当队列为空或者被执行callback的数量达到系统的最大数量时候,进入下一阶段。这六个阶段都被执行完毕之后被称为一个循环。

timer 阶段

这一阶段的callback是按照超时时间的顺序来调用的,并不是先进先出的队列逻辑

I/O callbacks 阶段

根据libuv的文档,一些应该在上一轮循环poll阶段执行的callback,因为某些原因不能执行,就会被延迟到这一轮的循环的I/O callbacks 阶段执行。这个阶段执行的callbacks是上一轮残留的。

idle,prepare 阶段

在这阶段使用了大量的宏(不做过多解释)

poll 阶段

执行I/O callback

check阶段

执行setImmediate的callback;

close阶段

执行所有close事件的callbacks

process.nextTick在哪里?

文档中提到,process.nextTick()不属于上面的任何一个阶段,它在每个阶段结束的时候都会运行。并且优先与其他microtask执行;

microtask什么时候执行?

它在每个阶段结束的时候都会运行。并且优先级低于process.nextTick()执行;

转载于:https://juejin.im/post/5cd3dd1af265da038733bae0

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值