В чем разница между корутиной и потоком

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

Ответ

Корутины — это легковесные потоки выполнения, работающие внутри одного потока ОС. Они не блокируют поток, а приостанавливают выполнение (suspend), позволяя другим корутинам работать. Потоки же — это тяжелые сущности ОС, требующие больше ресурсов и переключение между ними дорого.

Ключевые отличия:

  1. Ресурсы: Корутины дешевле (сотни тысяч vs десятки потоков).
  2. Блокировка: Корутины suspend, потоки блокируют поток ОС.
  3. Управление: Корутины управляются разработчиком, потоки — ОС.

Пример корутины:

suspend fun fetchData() {
    val data = withContext(Dispatchers.IO) { // Не блокирует поток
        networkRequest() 
    }
    updateUI(data)
}