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

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

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

相关文章

  • nodejs中npx 命令的使用小结

    nodejs中npx 命令的使用小结

    npx是npm 5.2+内置的工具,可直接运行Node.js包的可执行文件而无需安装,本文就来介绍一下nodejs中npx 命令的使用小结,感兴趣的可以了解一下
    2026-01-01
  • Node实战之不同环境下配置文件使用教程

    Node实战之不同环境下配置文件使用教程

    这篇文章主要给大家介绍了关于Node实战之不同环境下配置文件使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • 详解nodejs addon实现回调函数事件

    详解nodejs addon实现回调函数事件

    本文介绍了一个Node.js addon的实现,通过封装异步回调接口,使用libuv和nan模块处理从C++到JavaScript的回调,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-02-02
  • 从零学习node.js之简易的网络爬虫(四)

    从零学习node.js之简易的网络爬虫(四)

    简单的爬虫实现原理很简单:发送http请求至目标地址获取HTML页面数据,然后从获取来的页面数据中提取需要的数据保存。下面这篇文章主要介绍了利用node.js实现简易的网络爬虫的相关资料,需要的朋友可以参考下。
    2017-02-02
  • Node搭建https服务器实例详解

    Node搭建https服务器实例详解

    这篇文章主要介绍了Node搭建https服务器的方法,结合实例形式详细分析了创建ssl证书以及node.js调用https模块搭建https服务器的相关操作技巧,需要的朋友可以参考下
    2023-04-04
  • Webpack 实现 Node.js 代码热替换

    Webpack 实现 Node.js 代码热替换

    Webpack有一个很实用的功能叫做热替换(Hot-replace),尤其是结合React Hot Loader插件,开发过程中都不需要刷新浏览器,任何前端代码的更改都会实时的在浏览器中表现出来。
    2015-10-10
  • 一文详解Node.contain 函数兼容处理

    一文详解Node.contain 函数兼容处理

    这篇文章主要为大家介绍了Node.contain 函数兼容处理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • nodejs处理图片的中间件node-images详解

    nodejs处理图片的中间件node-images详解

    这篇文章主要介绍了nodejs处理图片的中间件node-images详解,非常具有实用价值,需要的朋友可以参考下
    2017-05-05
  • Node.js中处理错误的4种最佳方法分享

    Node.js中处理错误的4种最佳方法分享

    错误处理并不是编码工作中最吸引人的部分,但在 Node.js 中构建可靠、生产级别的应用程序时,它是绝对必要的,下面小编就来为大家介绍一下Node.js中处理错误的4种最佳方法吧
    2025-02-02
  • Nodejs如何使用http标准库异步加载https请求json数据

    Nodejs如何使用http标准库异步加载https请求json数据

    这篇文章主要介绍了Nodejs如何使用http标准库异步加载https请求json数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论