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()有什么区别呢"codetitle">复制代码 代码如下:
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()区别的资料了,小伙伴们是否清楚了他们之间的区别了呢?

标签:
node.js,nextTick(),setImmediate()

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。