Рубрики
Без рубрики

Демистифицирующий Исполнитель весенних задач

corePoolSize против maxPoolSize против емкость очереди @Bean @Primary public TaskExecutor… С тегами java, taskexecutor, размер пула, планирование.

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”