Ответ
Для вычислений в DefaultDispatcher (Coroutine Dispatcher) оптимальное количество потоков обычно равно количеству CPU-ядер. Kotlin Coroutines автоматически настраивают Dispatchers.Default с размером пула, равным Runtime.getRuntime().availableProcessors(), но не менее 2.
Пример:
val cores = Runtime.getRuntime().availableProcessors()
println("DefaultDispatcher threads: $cores")
Для CPU-bound задач этого достаточно, чтобы избежать перегрузки контекстными переключениями. Если нужна тонкая настройка, можно создать свой Dispatcher с Executors.newFixedThreadPool(n).