Что такое асинхронность?

🎯 Зачем спрашивают
  • Проверка базового понимания концепции и проблемы, которую она решает
  • Проверка кругозора
 
📝 Ответ
Асинхронность — абстрактный подход или паттерн, решающий проблему не блокирующего ввода/вывода. Или блокирующего, все зависит от точки зрения.
 
Асинхронность, в зависимости от языка, реализуется по-разному. Примеры ЯП, реализующих данный паттерн: JavaScript, Python, C#.
 
Проблема не блокирующего ввода/вывода заключается в том, что в приложении осуществляется множество операций в единицу времени:
  • пользователь интерактирует со страницей
  • происходят сетевые запросы
и наша задача обеспечить пользователю комфортное взаимодействие со страницей, чтобы она не подвисала, пока мы под капотом выполним все, что нужно.
В JavaScript асинхронность реализуется за счет EventLoop. Суть проста — выжать из единственного потока максимум, эффективно его используя.
 
⚖️ Компромиссы
✅ Плюсы: UI не зависает, эффективное использование ресурсов
❌ Минусы:
  • сложнее отлаживать, так как стек вызовов рвётся при каждом await/then
  • callback hell (до появления промисов/async/await)
  • требует понимания модели выполнения.
 
🔎 Встречные вопросы
  • Какой подход/паттерн решает схожую проблему, но иначе? (многопоточность)
  • Что такое EventLoop и как он работает?
 
🚩 Красные флаги
  • Слишком узкое определение: «это async/await» или «промисы»
  • Путает асинхронность и многопоточность
  • Отвечает только «чтобы не блокировать UI», без понимания общности подхода
 
📚 Источники / ссылки