Почему setImmediate() работает быстрее, чем последовательный код?
Я изучаю, как работает setImmediate(), и натолкнулся на странность, которой не смог найти техническое объяснение.
Код действительно прост:
setImmediate(function(){
console.log("third", process.hrtime() );
});
console.log("first", process.hrtime() );
console.log("second", process.hrtime() );
Независимо от того, сколько раз я запускаю этот фрагмент кода, общий результат всегда один и тот же:
Время последовательного кода (между "первым" и "вторым" отпечатками), по-видимому, в 3 раза больше, чем время между "вторым" и "третьим" отпечатками.
Позвольте мне привести 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 происходит в следующем цикле событий, есть ли у кого-нибудь идея, почему две последовательные строки кода ("первая и вторая") занимают в 3 раза больше строк кода ("вторая и третья"), которые разделены на различные циклы событий через setImmediate()?
1 ответ
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.