为什么 setImmediate() 运行 比顺序代码快?
Why does setImmediate() run faster than sequential code?
我正在学习 setImmediate() 的工作原理,遇到了一个我找不到技术解释的怪事。
代码真的很简单:
setImmediate(function(){
console.log("third", process.hrtime() );
});
console.log("first", process.hrtime() );
console.log("second", process.hrtime() );
无论我运行这段代码多少次,一般的结果都是一样的,就是:
顺序代码的时间(在 "first" 和 "second" 打印之间)似乎比 "second" 和 "third"打印.
让我提供 3 个示例输出来说明这一点:
示例 1
C:\>node tick.js
first [ 24684, 930636615 ]
second [ 24684, 933914009 ]
third [ 24684, 935172006 ]
第一到第二需要 0.0033 秒
第二到第三需要 0.0012 秒 (= 快 3 倍)
示例 2
C:\>node tick.js
first [ 24706, 107198319 ]
second [ 24706, 110517238 ]
third [ 24706, 111784622 ]
第一到第二需要 0.0034 秒
第二到第三需要 0.0012 秒
示例 3
C:\>node tick.js
first [ 24707, 952826072 ]
second [ 24707, 956081565 ]
third [ 24707, 957319084 ]
第一到第二需要 0.0032 秒
第二到第三需要 0.0013 秒
这样?
考虑到 setImmediate 发生在下一个事件循环中,
有谁知道为什么连续的 2 行代码 ("first and second") 比在不同事件上分开的代码行 ("second and third") 花费的时间长 3 倍 -循环通过 setImmediate() ?
console
调用比其他调用成本高得多,这会污染测试。
的输出
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
以及
的输出
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 控制台实现的。
我正在学习 setImmediate() 的工作原理,遇到了一个我找不到技术解释的怪事。
代码真的很简单:
setImmediate(function(){
console.log("third", process.hrtime() );
});
console.log("first", process.hrtime() );
console.log("second", process.hrtime() );
无论我运行这段代码多少次,一般的结果都是一样的,就是:
顺序代码的时间(在 "first" 和 "second" 打印之间)似乎比 "second" 和 "third"打印.
让我提供 3 个示例输出来说明这一点:
示例 1
C:\>node tick.js
first [ 24684, 930636615 ]
second [ 24684, 933914009 ]
third [ 24684, 935172006 ]
第一到第二需要 0.0033 秒
第二到第三需要 0.0012 秒 (= 快 3 倍)
示例 2
C:\>node tick.js
first [ 24706, 107198319 ]
second [ 24706, 110517238 ]
third [ 24706, 111784622 ]
第一到第二需要 0.0034 秒
第二到第三需要 0.0012 秒
示例 3
C:\>node tick.js
first [ 24707, 952826072 ]
second [ 24707, 956081565 ]
third [ 24707, 957319084 ]
第一到第二需要 0.0032 秒
第二到第三需要 0.0013 秒
这样?
考虑到 setImmediate 发生在下一个事件循环中, 有谁知道为什么连续的 2 行代码 ("first and second") 比在不同事件上分开的代码行 ("second and third") 花费的时间长 3 倍 -循环通过 setImmediate() ?
console
调用比其他调用成本高得多,这会污染测试。
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
以及
的输出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 控制台实现的。