node.js中的定时器nextTick()和setImmediate()区别分析


Posted in Javascript onNovember 26, 2014

1.node中使用定时器的问题在于,它并非精确的.譬如setTimeout()设定一个任务在10ms后执行,但是在9ms后,有一个任务占用了5ms,再次轮到定时器时,已经耽误了4ms.

好了node中的定时器就简单的讲这么多.

2.看代码:

process.nextTick(function(){

    console.log("延迟执行");

});

console.log("正常执行1");

console.log("正常执行2");

console.log("正常执行3");

console.log("正常执行4");

node.js中的定时器nextTick()和setImmediate()区别分析

通过这个例子,我想大家很清楚的就能看到nextTick()是用来干嘛的了.主要是用来异步执行的.

在看代码:

 setImmediate(function(){

     console.log("延迟执行");

 });

 console.log("正常执行");

node.js中的定时器nextTick()和setImmediate()区别分析

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

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

看代码:

代码一:

process.nextTick(function(){

    console.log("nextTick延迟")

});

setImmediate(function(){

    console.log("setImmediate延迟");

});

console.log("正常执行");

结果:

node.js中的定时器nextTick()和setImmediate()区别分析

代码二:

setImmediate(function(){

    console.log("setImmediate延迟");

});

process.nextTick(function(){

    console.log("nextTick延迟")

});

console.log("正常执行");

结果:

node.js中的定时器nextTick()和setImmediate()区别分析

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

从结果可以发现:

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

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

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

//加入2个nextTick()的回调函数

process.nextTick(function(){

    console.log("nextTick延迟执行1");

});

process.nextTick(function(){

    console.log("nextTick延迟执行2");

});

//加入两个setImmediate()回调函数

setImmediate(function(){

    console.log("setImmediate延迟执行1");

    process.nextTick(function(){

        console.log("强势插入");

    });

});

setImmediate(function(){

    console.log("setImmediate延迟执行2");

});

console.log("正常执行");

node.js中的定时器nextTick()和setImmediate()区别分析

从执行结果上看出:当第一个setImmediate()的回调函数执行完后,并没有立即执行第二个,而是进入了下一轮循环,再次按nextTick()优先,setImmediate()次后的顺序执行.之所以这样设计,是为了保证每次循环能够较快的执行结束.防止CPU占用过多而阻塞后续I/O调用的情况.

以上就是相关node.js中的定时器nextTick()和setImmediate()区别的资料了,小伙伴们是否清楚了他们之间的区别了呢?

Javascript 相关文章推荐
超级退弹代码
Jul 07 Javascript
动态为事件添加js代码示例
Feb 15 Javascript
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
Aug 04 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
Oct 23 Javascript
AngularJS基础 ng-show 指令简单示例
Aug 03 Javascript
jQuery实现边框动态效果的实例代码
Sep 23 Javascript
使用Angular CLI进行Build(构建)和Serve详解
Mar 24 Javascript
react 移动端实现列表左滑删除的示例代码
Jul 04 Javascript
layer弹出层自适应高度,垂直水平居中的实现
Sep 16 Javascript
JS实现简易贪吃蛇游戏
Aug 24 Javascript
JS绘图Flot如何实现动态可刷新曲线图
Oct 16 Javascript
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
JavaScript定义类和对象的方法
Nov 26 #Javascript
node.js操作mongoDB数据库示例分享
Nov 26 #Javascript
教你如何使用node.js制作代理服务器
Nov 26 #Javascript
浅析node.js中close事件
Nov 26 #Javascript
node.js超时timeout详解
Nov 26 #Javascript
node.js+Ajax实现获取HTTP服务器返回数据
Nov 26 #Javascript
使用node.js 获取客户端信息代码分享
Nov 26 #Javascript
You might like
php 页面执行时间计算代码
2008/12/04 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
qTip2 精致的基于jQuery提示信息插件
2012/02/17 Javascript
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
Bootstrap和Java分页实例第一篇
2016/12/23 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
python处理“
2019/06/10 Python
将Pytorch模型从CPU转换成GPU的实现方法
2019/08/19 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
50道外企软件测试面试题
2014/08/18 面试题
广场舞大赛策划方案
2014/05/31 职场文书
销售顾问工作计划书
2014/08/15 职场文书
2014入党积极分子批评与自我批评思想汇报
2014/09/20 职场文书
环卫个人总结
2015/03/03 职场文书
2015年度房地产工作总结
2015/04/09 职场文书