Ответ
Для максимально эффективных вычислений используйте ForkJoinPool или ThreadPoolExecutor с количеством потоков, равным количеству ядер процессора:
val cores = Runtime.getRuntime().availableProcessors()
val executor = Executors.newFixedThreadPool(cores)
Ключевые моменты:
- Фиксированный пул с размером по числу ядер CPU
- Для CPU-bound задач больше потоков не даст преимущества
ForkJoinPoolавтоматически использует work-stealing алгоритм- Для IO-bound задач нужна другая стратегия
Пример с ForkJoinPool:
val forkJoinPool = ForkJoinPool(cores)
forkJoinPool.submit { /* compute-intensive task */ }