Почему setImmediate () работает быстрее, чем последовательный код? - PullRequest
0 голосов
/ 26 августа 2018

Я изучаю, как работает 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 происходит в следующем цикле событий, у кого-нибудь есть идея, почему 2 последовательных строки кода («первая и вторая») занимают в 3 раза больше , чем строки кода («вторая и третья»)?"), которые разделяются на разные циклы событий через setImmediate ()?

1 Ответ

0 голосов
/ 26 августа 2018

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...