Асинхронность в JS

Простым языком обсудим важные темы:
– цикл событий в браузере (event loop)
– очередь задач (tasks queue) и микрозадач (microtasks queue)
– функции обратного вызова (callback)
– обещания (promise)
– сопрограммы или корутины (coroutine)
– async и await
– состояние гонки (race condition)
– микропаттерны для оптимизации debounce и throttle