首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么setImmediate()比顺序代码运行得更快?

为什么setImmediate()比顺序代码运行得更快?
EN

Stack Overflow用户
提问于 2018-08-25 21:01:55
回答 1查看 86关注 0票数 2

我正在学习setImmediate()是如何工作的,并且遇到了一个奇怪的问题,我找不到一个技术解释。

代码非常简单:

代码语言:javascript
复制
setImmediate(function(){
    console.log("third", process.hrtime() );
});

console.log("first", process.hrtime() );
console.log("second", process.hrtime() );

无论我运行这段代码多少次,一般结果都是相同的,即:

顺序代码的时间(在“第一”和“第二”打印之间)似乎比“第二”和“第三”打印之间的时间长3倍。

让我举三个例子来说明这一点:

示例1

代码语言:javascript
复制
C:\>node tick.js
first [ 24684, 930636615 ]
second [ 24684, 933914009 ]
third [ 24684, 935172006 ]

第一到第二需要0.0033秒

第二到第三是0.0012秒(= 3倍的速度)

示例2

代码语言:javascript
复制
C:\>node tick.js
first [ 24706, 107198319 ]
second [ 24706, 110517238 ]
third [ 24706, 111784622 ]

第一到第二需要0.0034秒

第二到第三需要0.0012秒

示例3

代码语言:javascript
复制
C:\>node tick.js
first [ 24707, 952826072 ]
second [ 24707, 956081565 ]
third [ 24707, 957319084 ]

第一到第二需要0.0032秒

第二到第三需要0.0013秒

因此,

考虑到setImmediate发生在下一个事件循环中,有谁知道为什么2行连续的代码(“第一和第二行”)占用的比在不同事件循环上通过setImmediate()分离的代码行(“第二行和第三行”)长3倍?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-25 23:09:50

console调用比其他调用成本高得多,这会污染测试。

输出.

代码语言:javascript
复制
let time1;
let time2;
let time3;

setImmediate(function(){
  time3 = process.hrtime();

  console.log(time1[1]);
  console.log(time2[1]);
  console.log(time3[1]);
});

time1 = process.hrtime();
time2 = process.hrtime();

908101090 908184221 909359846

的输出

代码语言:javascript
复制
let time1;
let time2;
let time3;

setImmediate(function(){
  time3 = process.hrtime();

  console.log(time1[1]);
  console.log(time2[1]);
  console.log(time3[1]);
});

time1 = process.hrtime();
console.log();
time2 = process.hrtime();
console.log();

949882232 954583707 956190379

因此,这是非常特定于Node.js控制台实现的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52021195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档