process.nextTick()究竟是如何工作的?

时间:2018-01-26 10:28:02

标签: javascript node.js

官方节点文档解释了以下内容:

  

在当前操作完成后,无论事件循环的当前阶段如何,都将处理nextTickQueue。

考虑到这一点,我通过以下方式测试了process.nextTick()

const heapdump = require('heapdump');

let count = 0;

function snapshot(){
    setTimeout(() => heapdump.writeSnapshot(), 5000)
}

process.nextTick(snapshot);

while(true){
    count++
    console.log(count);
}

我的目的是让process.nextTick(snapshot);强制将快照函数包含到事件循环中,在无限while循环期间调用自身。

为什么不发生这种情况?

1 个答案:

答案 0 :(得分:0)

因为节点的事件循环是单线程的,所以不会发生这种情况,所以“下一个滴答”只会在无限while处理完毕后才会发生,正如您可能已经猜到的那样,它永远不会发生。

这是因为node.js只能在这个单个线程中执行非阻塞I / O操作,但同步代码执行得很好,并且它会阻止事件循环的执行。

因此,在您的示例中,事件循环被阻止,等待while循环完成,永远不会到达“下一个滴答”或下一阶段。