手机版

node.js中Timer nextTick()和setImmediate()的区别分析

时间:2021-09-09 来源:互联网 编辑:宝哥软件园 浏览:

1.在1.node中使用计时器的问题是它不准确。例如,setTimeout()设置一个任务在10ms后执行,但在9ms后,一个任务需要5ms,当再次轮到计时器时,已经延迟了4ms。

好了,节点中的计时器到此为止。

2.看看代码:

复制代码如下: process . next tick(function(){ console . log('延迟执行');});Console.log('正常执行1 ');Console.log('正常执行2 ');Console.log('正常执行3 ');Console.log('正常执行4 ');

通过这个例子,我想每个人都可以清楚地看到nextTick()是用来做什么的。它主要用于异步执行。

查看代码:

复制代码如下: set immediate(function(){ console . log('延迟执行');});Console.log('正常执行');

我们发现setImmediate也是异步执行的。奇怪的

那么它和nextTick()有什么区别呢?

看看代码:

代码一:

复制代码如下: process . next tick(function(){ console . log(' next tick delay ')});设置立即(function () {console.log('设置立即延迟'));});Console.log('正常执行');

结果:

代码2 :

复制代码如下:设置立即(function () {console.log('设置立即延迟');});process . next tick(function(){ console . log(' next tick delay ')});Console.log('正常执行');

结果:

发现虽然代码顺序不同,但执行的结果是一样的。

你可以从结果中找到:

执行nextTick()的回调函数的优先级高于setImmediate();

Process.nextTick()属于空闲观察器,setImmediate()属于检查观察器。在每一轮循环检查中,空闲观察器在输入输出观察器之前,输入输出观察器在检查观察器之前。

在具体实现中,process.nextTick()的回调函数存储在数组中,setImmediate()的结果存储在链表中。在行为上,process.nextTick()将在每一轮中执行数组中的所有回调函数,而setImmediate()将在每一轮中执行链表中的一个回调函数。

复制代码如下://添加nextTick()的两个回调函数:process . nextTick(function(){ console . log(' nextTick延迟执行1 ');});process . next tick(function(){ console . log(' next tick延迟执行2 ');});//添加两个setimmediate()回调函数setImmediate()函数(){console.log ('setimmediate延迟执行1 ');process . next tick(function(){ console . log('强插入');});});设置立即(function () {console.log('设置立即延迟执行2 ');});Console.log('正常执行');

从执行结果可以看出,在执行完setImmediate()的第一个回调函数后,并没有立即执行第二个,而是进入下一轮循环,按照nextTick()优先,setImmediate()次的顺序再次执行。这样设计的原因是为了保证每个循环都能快速执行,防止CPU占用过多,阻塞后续的I/O调用。

以上是关于node.js中timer nextTick()和setImmediate()的区别的信息,朋友们知道它们的区别吗?

版权声明:node.js中Timer nextTick()和setImmediate()的区别分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。