В HTTP 1.1 клиенты могут отправлять несколько запросов через одно соединение, устанавливая заголовок Keep-Alive. В противном случае вам придется открывать новое соединение для каждого отдельного запроса. При установленном Keep-Alive несколько запросов могут отправляться через одно соединение.
Открытие соединения является дорогостоящим, так как требует дополнительного обхода для TCP-квитирования, прежде чем вы сможете сделать следующий запрос, поэтому вместо этого будет быстрее использовать уже существующее соединение.
Что делает пул соединений, так это то, что после того, как вы делаете запрос, это соединение остается открытым для последующих запросов, которые вы можете сделать, будучи отложенными в пуле. Requests устанавливает заголовок keep alive и управляет пулом за кулисами, поэтому вам обычно не нужно об этом беспокоиться.
Если вы используете многопоточность, пул синхронизирует доступ к соединениям, так что каждое соединение одновременно используется только одним потоком. Для одновременного выполнения нескольких потоков требуется несколько подключений в пуле.
Наличие большего количества соединений, чем потоков, вообще не увеличит производительность, поскольку пакет запросов блокирует поток при выполнении запроса, поэтому поток не может использовать несколько соединений одновременно. Для повышения производительности дополнительных подключений необходимо увеличить количество потоков.
Добавление таких подключений, хотя и помогает, когда скорость сети не ограничена, открытие большего количества подключений не делает Интернет быстрее. Так что просто добавляйте больше потоков и соединений, пока производительность не перестанет расти.
Я не уверен, что вы имеете в виду под динамическим изменением размера. Пул открывает новые соединения, когда это необходимо, и повторно использует старые, когда это возможно. Он прекращает открывать соединения после достижения максимума. В некотором смысле размер пула является динамическим, если он меньше максимального размера.