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.有时在调用堆栈绑定之后,在事件循环开始之前,运行回调是很有必要的。

转载于:https://www.cnblogs.com/node-jili/p/10161386.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值