Какие пулы потоков используют Dispatcher в корутинах

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

Ответ

В Kotlin корутинах Dispatcher использует следующие пулы потоков:

  1. Dispatchers.Default – пул потоков для CPU-интенсивных задач (размер равен числу ядер CPU, минимум 2).
  2. Dispatchers.IO – пул для блокирующих операций (по умолчанию до 64 потока).
  3. Dispatchers.Main – главный поток UI (Android, JavaFX и др.).
  4. Dispatchers.Unconfined – не имеет своего пула, запускается в текущем потоке.

Пример:

launch(Dispatchers.Default) { /* CPU-heavy task */ }
launch(Dispatchers.IO) { /* Blocking I/O */ }
launch(Dispatchers.Main) { /* Update UI */ }

Для кастомных пулов можно использовать Executor.asCoroutineDispatcher().