Почему фиксированность DefaultDispatcher зависит от количества ядер

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

Ответ

Количество потоков в DefaultDispatcher фиксировано и зависит от ядер процессора, потому что это оптимальное значение для CPU-bound задач. Kotlin Coroutines использует формулу max(2, количество_ядер) для баланса между параллелизмом и накладными расходами на переключение контекста.

Пример:

val cores = Runtime.getRuntime().availableProcessors()
println("DefaultDispatcher threads: ${cores.coerceAtLeast(2)}")

Это компромисс:

  • Меньше потоков → меньше contention (конкуренции за ресурсы)
  • Достаточно для параллельной обработки
  • Избегает oversubscription (когда потоков больше, чем ядер)

Для IO-bound задач лучше использовать Dispatchers.IO, который расширяет пул при необходимости.