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