node中的事件循环

简介

node中的js也是单线程的,所以为了实现非阻塞,它需要和浏览器同样实现一个事件循环机制。
最新版本的node执行和浏览器表现行为是一致的。
node中底层libuv库 实现了一套事件环机制。

node中的宏任务和微任务

由于node没有dom对象,所以没有MutationObserver对象,所以node中的微任务只有promise。在微任务队列之前,还有一个队列:nextTick队列。
node中的宏任务分为:

  1. 消息队列Timer
  2. poll队列(I/O操作)
  3. check队列(setImmediate)

node中的事件循环

  1. 进程执行的时候 会先执行同步代码
  2. 同步代码执行完毕后执行nextTick队列 [nextTick,nextTick]
  3. 清空微任务队列
    -------每取一个宏任务都会清空微任务-------
  4. 清空微任务后会看定时器队列中是否有完成的, 有的话拿出来依次执行 (如果没有定时器,直接走到poll阶段)
  5. 定时器任务完成后,会走到poll阶段里,里面包含一些i/o 操作的回调,同样依次执行
  6. poll清空后会查找check阶段中是否有回调,有的话会优先执行,执行完毕后,按照上述流程回到poll阶段中
  7. 如果check阶段中没有任务 就会再poll阶段中阻塞,等待定时器到达时间后再次执行 , 如果什么都没有了进程结束了

PS:本人也是初学,如有不对请指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值