setImmediate()がどのように機能するかを学んでいて、技術的な説明が見つからないという奇妙なことに遭遇しました。
コードは本当に簡単です:
setImmediate(function(){
console.log("third", process.hrtime() );
});
console.log("first", process.hrtime() );
console.log("second", process.hrtime() );
このコードを何度実行しても、一般的な結果は常に同じです。つまり、次のようになります。
シーケンシャルコードの時間(「最初」と「2番目」の印刷の間)は、「2番目」と「3番目」の印刷の間の時間より3倍長くかかるように見えます。
これを説明するために、3つの出力例を示します。
例1
C:\>node tick.js
first [ 24684, 930636615 ]
second [ 24684, 933914009 ]
third [ 24684, 935172006 ]
最初から2番目までは0.0033秒かかります
2番目から3番目は0.0012秒かかります(= 3倍速い)
例2
C:\>node tick.js
first [ 24706, 107198319 ]
second [ 24706, 110517238 ]
third [ 24706, 111784622 ]
1秒から2秒は0.0034秒かかります
2番目から3番目は0.0012秒かかります
例3
C:\>node tick.js
first [ 24707, 952826072 ]
second [ 24707, 956081565 ]
third [ 24707, 957319084 ]
最初から2番目までは0.0032秒かかります
2番目から3番目は0.0013秒かかります
したがって?
setImmediateが次のイベントループで発生するという事実を考えると、2つの連続するコード行(「1番目と2番目」)が分離されたコード行(「2番目と3番目」)よりも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コンソールの実装に非常に固有です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加