> Почему sleep(100) отработает примерно через 100 мс и может ли быть 99 мс? (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Яндекс

Стек: JavaScript

> Пример ответа

В JavaScript sleep(100) не является нативной функцией - обычно это либо setTimeout с колбэком, либо синтаксическая обёртка await new Promise(r => setTimeout(r, 100)). Таймеры в браузере и Node.js имеют минимальную задержку (обычно 4 мс для вложенных таймеров) и не гарантируют точного времени из-за цикла событий (event loop).

setTimeout(fn, 100) ставит задачу в очередь через ~100 мс, но выполнение начнётся только после завершения текущего синхронного кода и всех задач в очереди микротасок. Если в момент срабатывания таймера выполняется другой код (например, тяжёлый цикл или обработка события), задержка увеличится. Поэтому 99 мс быть не может - минимальное значение будет ≥100 мс (с учётом погрешности и округления до ближайшего тика таймера, который в браузерах обычно 4 мс). В Node.js с --expose-gc и высокоточными таймерами возможно отклонение в ±1 мс, но 99 мс - это крайне маловероятно из-за накладных расходов на планирование.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью