process.nextTick()工作机制解析及无限循环下未执行问题问询
为什么
process.nextTick()在无限while循环中没被执行? 咱们先把process.nextTick()的核心工作机制说透——官方文档里提到的“无论事件循环处于当前哪个阶段,nextTickQueue都会在当前操作完成后处理”,这里的**“当前操作”指的是当前正在执行的同步代码块**,可不是事件循环里的某个阶段哦。
Node.js是单线程模型,同步代码会牢牢霸占主线程,直到它完全执行完毕,事件循环才有机会启动并开始处理各种队列。现在看你的代码:那个while(true)是个无限同步循环,它会一直占用主线程,永远不会退出。这就意味着,事件循环根本没机会运转起来,更别说去处理nextTickQueue里的snapshot函数了。
举个对比的例子,如果把无限循环改成有限循环(比如循环100次),那同步代码执行完后,事件循环会立刻处理nextTick的回调,然后才继续后续的事件循环阶段。但无限循环会让主线程一直被占用,事件循环永远得不到运行的机会,process.nextTick里的函数自然就没机会执行。
再补个关键点:process.nextTick的优先级确实极高,它会在事件循环的任何阶段结束后、进入下一个阶段前执行,但这一切的大前提是当前的同步任务已经完成,线程交还给了事件循环。你的代码里同步任务永远完不成,后面的所有步骤都无从谈起。
内容的提问来源于stack exchange,提问作者Clem
相关产品推荐
相关产品推荐

