PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Что такое Macrotask?

Асинхронность и Event Loop

Macrotask (макрозадача) — это единица работы в Event Loop, которую цикл берёт из очереди макрозадач по одной после выполнения всех микрозадач.

Что относится к макрозадачам

  • setTimeout, setInterval.
  • setImmediate (Node.js).
  • Обработчики DOM-событий.
  • Сетевые коллбэки, I/O.
  • MessageChannel, postMessage.

Порядок в Event Loop

1. Выполнить синхронный код.
2. Опустошить ВСЮ очередь микрозадач.
3. Взять ОДНУ макрозадачу.
4. Снова опустошить микрозадачи.
5. (Возможен рендеринг между макрозадачами.)
setTimeout(() => console.log('macro'), 0);
Promise.resolve().then(() => console.log('micro'));
console.log('sync');
// sync → micro → macro

Макрозадачи против микрозадач

  • Микрозадачи (Promise, queueMicrotask) — выполняются все сразу после текущей задачи, до следующей макрозадачи и рендера.
  • Макрозадачи — по одной за «тик»; между ними браузер может отрисовать кадр.

Практика

Разбиение тяжёлой работы на setTimeout даёт браузеру возможность отрисовать UI и обработать события между кусками.

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

Macrotask — задача из очереди макрозадач (setTimeout, события, I/O), которую Event Loop берёт по одной после опустошения всех микрозадач. Между макрозадачами возможен рендеринг, поэтому setTimeout всегда позже Promise.then.

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