内容简介:node.js 中的event loop 每一次循环都要执行这6个阶段。每个阶段都有自己的callback队列,每当进入某个阶段,都会从所属的队列中取出callback来执行,当队列为空或者被执行callback的数量达到系统的最大数量时候,进入下一阶段。这六个阶段都被执行完毕之后被称为一个循环。这一阶段的callback是按照超时时间的顺序来调用的,并不是先进先出的队列逻辑根据libuv的文档,一些应该在上一轮循环poll阶段执行的callback,因为某些原因不能执行,就会被延迟到这一轮的循环的I/O
- 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()执行;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机动画的算法基础
鲍虎军 金小刚 彭群生 / 浙江大学出版社 / 2000-12 / 60.00元
《计算机应用技术前沿丛书:计算机动画的算法基础》主要内容简介:20世纪是一个科技、经济空前发展的时代,从世纪初相对论、量子理论的创立到今天以信息产业为龙头的高科技产业成为经济发展的第一支柱,人类社会发生了根本性的变革。而在这场以科学技术为社会发展直接动因的变革中,意义最深远、影响最广泛的就是计算机及其相关技术的发展和应用。在过去的50年里,计算机已从最初的协助人类进行精密和复杂运算的单一功能的运算......一起来看看 《计算机动画的算法基础》 这本书的介绍吧!