corePoolSize
против Максимальный размер пула
против вместимость очереди
@Bean @Primary public TaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(3); executor.setMaxPoolSize(6); executor.setQueueCapacity(4); executor.setWaitForTasksToCompleteOnShutdown(false); executor.setThreadNamePrefix("my-async"); executor.initialize(); return executor; }
Размер основного пула
В двух словах, Размер пула ядра
– это счастливый путь. Когда отправляется новая задача и выполняется меньше потоков corePoolSize, создается новый поток для обработки запроса, даже если другие потоки простаивают. Если количество запущенных потоков превышает corePoolSize, но меньше максимального размера пула, новый поток создается только в том случае, если ни один поток не простаивает.
Максимальный размер бассейна
Он определяет верхний предел потоков, которые когда-либо могут быть созданы! Как только предел достигнут (поток недоступен), задачи больше не принимаются.
Вместимость очереди
Определяет количество задач, которые будут поставлены в очередь, когда весь пул ядра будет заполнен. Потоки будут масштабироваться до максимального размера пула, когда очередь заполнена.
Объясни мне, как будто мне 5 лет
Простой и эффективный способ получить это – представить себя в банке.
Вы когда-нибудь стояли в очереди, даже если есть свободное окно? Зачем банку держать клиента в очереди, если есть свободное кассовое окно? Именно так обстоит дело с core pool size
. Если есть неиспользуемые потоки, новые задачи назначаются непосредственно им.
Если доступное окно (corepoolsize) заполнено, клиентов просят подождать в очереди. Вот тут-то и появляется емкость очереди
на картинке! Новые задачи продолжают стоять в очереди до тех пор, пока больше никаких задач не будет поставлено в очередь.
Что делать, если зал ожидания полон клиентов? Банк может выделять/открывать новые кассовые окна по мере увеличения числа клиентов (задач). У них было еще 3 в запасе. Здесь идет максимальный размер пула
в контексте.
Как только все эти окна (потоки) будут заняты, Банк больше не сможет обслуживать новых клиентов (задачи). Согласны? И впредь новые задания не принимаются!
Оригинал: “https://dev.to/ashutosh049/demystifying-spring-task-executor-3cf0”