setTimeout、setImmediate、process.nextTick,区别

setImmediate() vs setTimeout()区别:
setImmediate()和setTimeout()是很相似的,由于他们被调用的时机不同从而他们的行为不同。
setImmediate(),一旦poll阶段完成,就立即执行的脚本代码。
setTimeout(),在给定的阈值之后尽可能快的执行。

process.nextTick()
你可能已经意识到process.nextTick()并没有显示出来。即使他是异步api的一部分,这是因为nextTick不是
事件循环的一部分,相反,在当前操作完成后,nextTickQueue将被处理,而不管事件循环的当前阶段如何。
在事件循环以前我们要执行nextTick,这能因此一些不好的方面,这样会在你递归执行nextTick是把I/O进程
完全阻塞掉,从而组织事件循环到达poll阶段。
为什么要这样做呢?
为什么在node中允许这样做呢?这样做的部分原因是源于这样的设计哲学:所有的api必须是异步的即使他不
需要异步,我们允许用户代码执行的情况下给用户传递一个错误,
apiCall()总是在用户剩余的代码之后和允许事件循环继续之前运行它的回调,允许JS调用堆栈展开,然后立
即执行提供的回调,该回调允许人员对process.nextTick()进行递归调用,从而实现了解决“超过v8的最大
调用堆栈大小”的问题。

为什么要使用process.nextTick()?
这里有两个主要的原因
1.允许用户在事件循环开始之前,处理错误,清理不必要的资源,或者从新尝试连接。
2.有时在调用堆栈绑定之后,在事件循环开始之前,运行回调是很有必要的。

猜你喜欢

转载自www.cnblogs.com/node-jili/p/10161386.html