Разница в том, что если вы меньше размера основного пула, каждая новая задача создает новый поток независимо от незанятых потоков в пуле. Количество потоков увеличивается только после заполнения очереди, если вы уже достигли размера основного пула, но все еще не достигли максимального значения.
Прекрасный пример этого - когда у вас есть система, в которой вы точно не знаете, сколько одновременной нагрузки она будет иметь (например, веб-сервер). Эта функция позволяет вам указывать базовый набор потоков, возможно, исходя из количества ядер, которые есть на вашей машине, но допускает большую нагрузку, чем вы ожидали.
Это особенно полезно, если у вас больше нагрузки ввода / вывода, чем вы ожидали, и потоки в вашем пуле проводят много времени, блокируя. Ваша очередь может легко заполниться без большой параллельной загрузки в этом сценарии, и это легко исправить, добавив пару новых потоков для обслуживания нескольких параллельных запросов.