Каково различие между corePoolSize и maxPoolSize в Spring ThreadPoolTaskExecutor

Я должен отослать massEmails всем пользователям веб-сайта. Я хочу использовать пул потоков для каждой электронной почты, которая отослана. В настоящее время я устанавливал значения к:

<property name="corePoolSize" value="500" />
<property name="maxPoolSize" value="1000" />

Каково различие между двумя, и оно масштабируется. В настоящее время у меня есть приблизительно 10 000 пользователей.

35
задан shmosel 1 July 2019 в 20:08
поделиться

2 ответа

corePoolSize - минимальное количество потоков, используемых пулом. Число может увеличиваться до maxPoolSize . Когда нагрузка снижается, размер пула снова уменьшается до corePoolSize .

Отправка электронной почты кажется связанной операцией ввода-вывода. Я не думаю, что 500 потоков сделают это быстрее.

19
ответ дан 27 November 2019 в 06:42
поделиться

В javadoc лучше всего сказано :

Когда новый задача отправлена ​​[...], и меньше corePoolSize потоков запущен, новый поток создается для обработать запрос, даже если другой рабочие потоки простаивают. Если есть больше corePoolSize , но меньше maximumPoolSize запущенных потоков, a новый поток будет создан, только если очередь заполнена. Установив corePoolSize и maximumPoolSize то же самое, вы создаете фиксированный размер пул потоков. Установив maximumPoolSize по существу неограниченное значение, такое как Integer.MAX_VALUE , вы разрешаете бассейн для размещения произвольной количество одновременных задач.

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

40
ответ дан 27 November 2019 в 06:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: