В чем разница между асинхронностью, параллельностью, многопоточностью и concurrency

«В чем разница между асинхронностью, параллельностью, многопоточностью и concurrency» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Асинхронность - выполнение задач без блокировки основного потока (например, корутины или коллбэки). Параллельность - одновременное выполнение задач на разных ядрах CPU. Многопоточность - использование нескольких потоков в одном процессе. Concurrency - более общее понятие, означающее выполнение нескольких задач в перекрывающиеся периоды времени (может быть и на одном ядре через чередование).

Пример с корутиной (асинхронность):

viewModelScope.launch {
    val data = async { repository.fetchData() } // не блокирует UI
    updateUI(data.await())
}