PassFront
  1. PassFront
  2. База знаний
  3. Массивы и структуры данных

Бесконечно ли растет очередь задач?

Массивы и структуры данных

Очередь задач не растёт бесконечно сама по себе, но её можно переполнить, генерируя задачи быстрее, чем они обрабатываются — тогда возможна деградация или зависание.

В нормальной ситуации

Event Loop обрабатывает задачи по мере поступления: опустошает микрозадачи, берёт макрозадачу, повторяет. Если задачи добавляются с разумной скоростью, очередь не растёт.

Когда очередь растёт

Бесконечная генерация микрозадач

Микрозадача, порождающая новую микрозадачу, блокирует цикл — не даёт дойти до макрозадач и рендера (страница «зависает»):

function loop() {
  Promise.resolve().then(loop); // бесконечная микрозадача
}
loop(); // блокирует рендеринг

Быстрее добавляют, чем обрабатывают

Если события/таймеры генерируются чаще, чем успевают выполняться (тяжёлые обработчики scroll/resize), очередь макрозадач накапливается → задержки, лаги.

Ограничения

  • Память ограничена — бесконечный рост приведёт к нехватке памяти или зависанию.
  • Практически движок не даёт «переполниться» тихо — либо всё тормозит, либо падает.

Как избежать

  • Не создавать бесконечные цепочки микрозадач.
  • Троттлинг/дебаунс частых событий.
  • Разбивать тяжёлую работу.

Коротко для собеседования

Сама по себе очередь не растёт бесконечно, но её можно переполнить, генерируя задачи быстрее обработки. Бесконечная цепочка микрозадач блокирует рендер и макрозадачи (зависание). Частые тяжёлые события накапливают очередь. Избегают дебаунсом/троттлингом и разбиением работы.

Другие вопросы раздела