Home > Archives > NodeJS执行机制

NodeJS执行机制

Publish:

今天在学习《深入浅出NodeJS》,对Node的执行机制感觉有了一定的了解,又有一些迷糊,于是将它做一个梳理与总结。

NodeJS执行机制

按照顺序来整理Node的执行机制。

我将Node中的观察者分为四类。

一类是处理事件的观察者(如I/O观察者、网络请求观察者),称其为 事件观察者

一类是timer的handles,称其为 handles观察者

一类是process.nextTick()的观察者,称其为 tick观察者

一类是setImmediate()的观察者,称其为 immediate观察者

下面是进程启动时执行的机制(1):

1、依序执行所有同步代码

2、如果遇到普通的事件,将其加入到对应类型的事件观察者

3、如果遇到setTimeout()及setInterval(),将其timer加入到handles观察者

4、把遇到的所有process.nextTick()加入tick观察者,将所有process.nextTick()的回调函数加入任务队列

5、把遇到的所有setImmediate()加入immediate观察者,将第一个setImmediate()的回调函数加入任务队列

这就是按序执行所有Node代码时所做的事,然后就开始进行事件循环了,下面是事件循环中一个tick所做的事(2),需要注意的是,以下步骤中执行的每一个回调,都按照(1)的步骤执行:

1、检查tick观察者,由于其中所有事件的回调都在任务队列上,所以执行其中所有事件的回调

2、检查immediate观察者,因为只有其中第一个事件的回调在任务队列上,所以执行其中第一个事件的回调

3、检查是否有普通事件触发,如果触发则将其回调加入任务队列并执行

4、逐个检查handles观察者中的timer,如果计时已到,将其对应的回调添加到任务队列并执行

5、如果在上述过程执行完没有检查到事件(可以没有回调,检查到待处理事件即可),则退出进程,否则重新进行(2)循环

而JavaScript中的事件循环机制与Node应该是类似的,只是没有tick观察者等特殊的观察者而已。

声明: 本文采用 BY-NC-SA 授权。转载请注明转自: NodeJS执行机制 - 无火的余灰