Что такое оптимальный размер пула потоков для простой работы с программными задачами на Java?

Im использует пул потоков для выполнения задач, которые в основном основаны на процессоре с небольшим количеством операций ввода-вывода, размера один больше, чем число процессоров.

Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1)

Предполагая случай простой программы, которая подчиняет все свои задачи этому исполнителю и делает мало что, я предполагаю, что пул потоков больше будет замедлять работу, потому что ОС придется времяпровождать, что cpus чаще имеет шанс дать каждому потоку в threadpool шанс бежать.

Правильно ли это, и если это так, то это реальная проблема или в основном теоретическая, то есть если бы я увеличил размер threadpool до 1000, я заметил бы огромную разницу.

Ответ 1

Если у вас есть задачи с привязкой к ЦП, так как вы увеличиваете количество потоков, вы получаете дополнительные накладные расходы и более медленные показатели. Примечание: наличие большего количества потоков, чем ожидающих задач, является просто пустой тратой ресурсов, но может не так сильно замедлить выполнение задач.

Я бы использовал несколько (например, 1 или 2) числа cpus, а не добавлял только один из них, имеющих слишком много потоков, может иметь удивительное количество накладных расходов.