博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node.js 中的Event Loop的6个阶段
阅读量:6929 次
发布时间:2019-06-27

本文共 966 字,大约阅读时间需要 3 分钟。

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

你可能感兴趣的文章
Session详解 session机制 cookie机制
查看>>
Codeforces Gym 100431A Achromatic Number 欧拉回路
查看>>
睡前做两件事胜过任何补药
查看>>
吃鸡蛋引发的血案,详解内存中的字节序
查看>>
第一篇博客
查看>>
php 基础
查看>>
leetcode-80-删除排序数组中的重复项 II
查看>>
IE7下元素的 'padding-top' 遇到 'clear' 特性在某些情况下复制到 'padding-bottom'
查看>>
CSS动画Demo
查看>>
NLP自然语言处理学习笔记二(初试)
查看>>
Android界面刷新、线程注意问题
查看>>
SQLServerDBA十大必备工具---让生活轻松点(转)
查看>>
js获取简单表单对象(1)
查看>>
css样式
查看>>
C语言结构体知识
查看>>
[国家集训队] Crash 的文明世界
查看>>
MUI ios 与 安卓 软键盘调用事件
查看>>
线性表
查看>>
百度OCR文字识别-Android安全校验
查看>>
oracle客户端服务端字符集-解决乱码
查看>>