Где быстрее выполнятся 20 операций на Dispatchers.Default или Dispatchers.IO в Coroutines

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

Ответ

В большинстве случаев Dispatchers.Default и Dispatchers.IO используют один и тот же пул потоков, но с разными ограничениями.

  • Default: Оптимизирован для CPU-интенсивных задач (макс. потоков ≈ кол-ву ядер CPU).
  • IO: Для блокирующих операций (чтение/запись, сетевые вызовы). Под капотом может создавать больше потоков при необходимости.

Если операции неблокирующие (например, вычисления) — Default будет эффективнее, так как избегает избыточных потоков. Для блокирующих операций — IO.

// CPU-bound (лучше Default)
repeat(20) {
    launch(Dispatchers.Default) { heavyComputation() }
}

// IO-bound (лучше IO)
repeat(20) {
    launch(Dispatchers.IO) { blockingFileRead() }
}