Что такое оптимальный размер пула потоков для простой работы с программными задачами на Java?
Im использует пул потоков для выполнения задач, которые в основном основаны на процессоре с небольшим количеством операций ввода-вывода,
размера один больше, чем число процессоров.
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1)
Предполагая случай простой программы, которая подчиняет все свои задачи этому исполнителю и делает мало что, я предполагаю, что пул потоков больше будет замедлять работу, потому что ОС придется времяпровождать, что cpus чаще имеет шанс дать каждому потоку в threadpool шанс бежать.
Правильно ли это, и если это так, то это реальная проблема или в основном теоретическая, то есть если бы я увеличил размер threadpool до 1000, я заметил бы огромную разницу.
Ответы
Ответ 1
Если у вас есть задачи с привязкой к ЦП, так как вы увеличиваете количество потоков, вы получаете дополнительные накладные расходы и более медленные показатели. Примечание: наличие большего количества потоков, чем ожидающих задач, является просто пустой тратой ресурсов, но может не так сильно замедлить выполнение задач.
Я бы использовал несколько (например, 1 или 2) числа cpus, а не добавлял только один из них, имеющих слишком много потоков, может иметь удивительное количество накладных расходов.
Ответ 2
Для справки, проверьте это описание.
http://codeidol.com/java/java-concurrency/Applying-Thread-Pools/Sizing-Thread-Pools/
Короче говоря, то, что у вас есть (№ ЦП + 1), в среднем является оптимальным.