если все ваши потоки работают, и у вас больше активных потоков, чем у процессоров, вы потратите время на переключение контекста.
Если у вас двухъядерный процессор, не рассчитывайте на отличную производительность с более чем 4 активными рабочими потоками.
Так что запускать 14 потоков, которые все работают, - плохая идея, если у вас нет процессора, который может этим управлять. Физическая архитектура процессора и набор функций имеют большое влияние на это. Я хочу сказать, что пул потоков поможет управлять переключением контекста, но одновременный запуск 14 занятых потоков всегда снижает производительность ... возможно, вы получите более высокую производительность, если просто последовательно исключать потоки. Очевидно, что это большое утверждение, и, вероятно, это не правда, но вы понимаете, суть.
Следовательно, использование пула потоков вместе с профилировщиком позволяет определить оптимальное количество потоков, доступных для пула потоков.
В большинстве случаев, когда люди назначают пул потоков, большинство потоков ничего не делает большую часть времени или поток спит / блокируется, в то время как некоторая медленная операция или внешняя зависимость ожидают ответа.
рассмотрите возможность использования шаблона асинхронности, чтобы вы могли получать информацию о прогрессе из своих потоков.
На двухъядерном процессоре я не решился бы использовать более 3 потоков, если они все работают 100% времени