setImmediate() がどのように機能するかを学んでいますが、技術的な説明が見つからないという奇妙なことに遭遇しました。
コードは非常に単純です。
setImmediate(function(){
console.log("third", process.hrtime() );
});
console.log("first", process.hrtime() );
console.log("second", process.hrtime() );
このコードを何回実行しても、一般的な結果は常に同じです。
シーケンシャル コードの時間 (「1 回目」と「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 ]
最初から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() を介したさまざまなイベントループ?