nodejs事件循环
这两天系统地学习了一下nodejs中的时间循环机制。这篇Post将把其基本内容以及我当时遇到的问题都记录下来。 Note :为避免理解冲突,将在官方文档的例子上进行理解。 基础knowledge nodejs的event loop是javascript实现非阻塞IO的手段。 node的整体结构 借用一张图: nodejs由c/c++库(主要为libuv依赖、v8实现部分和其它)和js实现的核心库。 node的事件循环 既然本篇主要讨论事件循环,基本理解一下node中事件循环与js代码的对应关系: 这里只补充一下pending IO callback 这一phase。这个阶段主要处理一些IO操作的回调,比如读文件的回调,网络请求完成的回调等(排除任何close回调)。 每个phase有一个类似FIFO的堆栈。当运行到这个phase时,如果有回调的话,会从这个回调堆栈中取出所有回调来执行,或者是到达了该phase的最大执行数限制,接着进入下一phase。 nodejs代码运行流程 从main.js开始运行主程序代码,接着判断是否event loop结束(如果事件循环一轮都没有任何回调了,说明可以终止进程了)。有的话,会从timer phase开始进行event loop。 nodejs event loop基础 上图是nodejs官网的图。表明event loop由以上phase组成: