@zuart
... уже и не знаю, нуп, похоже ...

Почему setInterval кушает больше проца чем setTimeout?

Приветствую сообщество.

Натолкнулся в одном из модулей на крайне интересную ситуацию. Изложу в кратком формате...

Вариант кода 1:
const timer = setInterval(() => {
  periodicFunction();
}, 1000);

periodicFunction() {
  ...рабочий код функции...
};


Вариант кода 2:
periodicFunction();

periodicFunction() {
  const timer = setTimeout(() => {
    clearTimeout(timer);
    periodicFunction();
  }, 1000);

  ...рабочий код функции...
};


По сути они практически одинаковые - каждую секунду вызывается функция, выполняет некую работу (просто в асинхроне читает небольшой JSON-файл и парсит его в переменную).

Однако столкнулся с абсолютно непонятным для меня эффектом:
- вариант кода 1 (одноразовый вызов setInteval) грузит процессор на 10% локально и почти 40% на сервере
- вариант кода 2 (периодический вызов setTimeout) грузит процессор не более чем на 1% локально и 1.5% на сервере

Есть предположения причины такого странного поведения?
  • Вопрос задан
  • 946 просмотров
Решения вопроса 1
@zuart Автор вопроса
... уже и не знаю, нуп, похоже ...
После обновления не знаю какого по счету NODE наткнулся на старые тестовые скрипты, которыми эмулировал проблему. Решил повторить тесты - проблема не воспроизводится. Видимо "корень зла" был в конкретной версии...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Поставьте console.log( counter++ ) в вашей periodicFunction, посмотрите, сколько раз она реально вызывается. setTimeout и setInterval не жрут процессор сами по себе, тем более до 40%.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы