Почему большое количество потоков может снизить эффективность

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

Ответ

Большое количество потоков может снизить эффективность из-за накладных расходов на переключение контекста, синхронизацию и конкуренцию за ресурсы (CPU, память).

  1. Переключение контекста – при большом числе потоков процессор тратит время на сохранение/восстановление состояний.
  2. Синхронизация – блокировки (synchronized, ReentrantLock) приводят к ожиданию и простоям.
  3. Кэш-промахи – частые переключения потоков снижают эффективность кэша CPU.

Пример:

// Плохо: 1000 потоков для легковесных задач  
repeat(1000) {  
    thread { println("Task $it") }  
}  

// Лучше: использовать пул потоков (например, Dispatchers.IO)  
repeat(1000) {  
    CoroutineScope(Dispatchers.IO).launch { println("Task $it") }  
}  

Оптимальное число потоков ≈ количеству ядер CPU (для CPU-bound задач). Для IO-bound задач можно использовать асинхронные API (корутины, RxJava).