node 中的 nextTick和setImmediate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"use strict";
console.log("main1");
// 该函数仅在 Node.js 环境下可以使用
process.nextTick(function () {
console.log("process.nextTick1");
});
setTimeout(function () {
console.log("setTimeout");
process.nextTick(function () {
console.log("process.nextTick2");
});
}, 0);
new Promise(function (resolve, reject) {
console.log("promise");
resolve();
}).then(function () {
console.log("promise then");
});
console.log("main");
  • Node.js 提供的 nextTick 和 setImmediate
  • nexTick 和 setImmediate 属于 node 中 process 模块中方法
  • process.nextTick()属于 idle 观察者,setImmediate()属 check 观察者。
  • 在每一轮循环检查中,idle 观察者先于 I/O 观察者,I/O 观察者先 check 观察者。
  • idle 观察者,也就是事件轮询最先进行的任务 I/O 观察者,也就是事件轮询的任务(任务中的回调函数)
  • check 观察者 事件轮询中的任务的结束
  • 在具体实现上,process.nextTick()的回调函数保存在一个数中,setImmediate() 的结果则是保存在链表。在行为上 process.nextTick() 在每轮循环中会将数组中的回调函数全部行完。而 setImmediate() 在每轮循环中执行链表中的一个回调函数。