Node.js中Process.nextTick()和Process.setImmediate()的区别

 更新时间:2022年07月05日 15:07:38   作者:社会主义接班人  
这篇文章介绍了Node.js中Process.nextTick()和Process.setImmediate()的区别,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、Webstrom使用node.jsIDE的问题

在区别这两个函数之前来说一下Webstrom使用node.jsIDE的问题,在配置Node.js的IDE了,但setImmediate()、require等这些node.js中内置的函数时并不会有提示,要解决这个问题只要设置一下Webstrom,File---->Setting---->Languages&Frameworks------>Node.js and NPM中的Node.js core Library is not enabled设为Enable.

二、两者的区别

1.在理解两者的区别之前要说一下轮询

前面博客也有记录,nodejs中是事件驱动的,有一个循环线程一直从事件队列中取任务执行或者I/O的操作转给后台线程池来操作,把这个循环线程的每次执行的过程算是一次轮询.

2.setImmediate()的使用

即时计时器立即执行工作,它是在事件轮询之后执行,为了防止轮询阻塞,每次只会调用一个。

3.Process.nextTick()的使用

它和setImmediate()执行的顺序不一样,它是在事件轮询之前执行,为了防止I/O饥饿,所以有一个默认process.maxTickDepth=1000来限制事件队列的每次循环可执行的nextTick()事件的数目。

4.总结

在网上百度的关于它们的总结:

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

process.nextTick()属于idle观察者,setImmediate()属于check观察者.在每一轮循环检查中,idle观察者先于I/O观察者,I/O观察者先于check观察者.

在具体实现上,process.nextTick()的回调函数保存在一个数组中,
setImmediate()的结果则是保存在链表中.
在行为上,process.nextTick()在每轮循环中会将数组中的回调函数全部执行完.
而setImmediate()在每轮循环中执行链表中的一个回调函数.

5.代码demo

//加入2个nextTick()的回调函数
process.nextTick(function(){
    console.log("nextTick延迟执行A");
});
process.nextTick(function(){
    console.log("nextTick延迟执行B");
    setImmediate(function(){
        console.log("setImmediate延迟执行C");
    });
    process.nextTick(function(){
        console.log("nextTick延迟执行D");
    });
});
//加入两个setImmediate()回调函数
setImmediate(function(){
    console.log("setImmediate延迟执行E");
    process.nextTick(function(){
        console.log("强势插入F");
    });
    setImmediate(function(){
        console.log("setImmediate延迟执行G");
    });
});
setImmediate(function(){
    console.log("setImmediate延迟执行H");
    process.nextTick(function(){
        console.log("强势插入I");
    });
    process.nextTick(function(){
        console.log("强势插入J");
    });
    setImmediate(function(){
        console.log("setImmediate延迟执行K");
    });
});
console.log("正常执行L");

输出结果:

"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Immediate.js
正常执行L
nextTick延迟执行A
nextTick延迟执行B
nextTick延迟执行D
setImmediate延迟执行E
setImmediate延迟执行H
setImmediate延迟执行C
强势插入F
强势插入I
强势插入J
setImmediate延迟执行G
setImmediate延迟执行K

Process finished with exit code 0

关于执行顺序的问题很不容易搞明白,说实话现在我对它还是不是太理解,希望有大神能给讲明白。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 更新Node.js的四种方法小结

    更新Node.js的四种方法小结

    Node.js是一个开放源代码的跨平台JavaScript运行环境,它在不同的平台上都得到了广泛使用和支持,强大的生态系统、持续的更新和不断改进的性能使得Node.js非常受欢迎,然而,更新Node.js仍然是一个必要的过程,本文给大家介绍一些有关如何更新Node.js的方法
    2023-11-11
  • node.js中使用q.js实现api的promise化

    node.js中使用q.js实现api的promise化

    这篇文章主要介绍了node.js中使用q.js实现api的promise化,promise一个标准,它描述了异步调用的返回结果,包括正确返回结果和错误处理,需要的朋友可以参考下
    2014-09-09
  • 为何从eggjs升级到midwayjs的原因详解

    为何从eggjs升级到midwayjs的原因详解

    这篇文章主要为大家介绍了为何从eggjs升级到midwayjs的原因详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 使用Node.js写一个代码生成器的方法步骤

    使用Node.js写一个代码生成器的方法步骤

    这篇文章主要介绍了使用 Node.js 写一个代码生成器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Node.js安装教程和NPM包管理器使用详解

    Node.js安装教程和NPM包管理器使用详解

    这篇文章主要介绍了Node.js安装教程和NPM包管理器使用详解,安装部分讲解了Windows、和MAC OS下的安装图解,并介绍了Linux下的源码安装方法,最后对NPM包管理器做了详细介绍,需要的朋友可以参考下
    2014-08-08
  • npm install -g 遇到权限问题解析

    npm install -g 遇到权限问题解析

    这篇文章主要为大家介绍了npm install -g 遇到权限问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • node.js使用require()函数加载模块

    node.js使用require()函数加载模块

    本文通过几个具体实例来分析node.js中使用require()函数来加载模块的方法。非常的详尽,给需要的小伙伴们参考下吧
    2014-11-11
  • node使用request请求的方法

    node使用request请求的方法

    这篇文章主要介绍了node使用request请求的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 关于npm install过程失败的几种处理方式

    关于npm install过程失败的几种处理方式

    这篇文章主要介绍了关于npm install过程失败的几种处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • nodejs如何解决高并发问题

    nodejs如何解决高并发问题

    这篇文章主要介绍了nodejs如何解决高并发问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论