Ядро ThreadPoolTaskExecutor и максимальный размер пулаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ядро ThreadPoolTaskExecutor и максимальный размер пула

Сообщение Anonymous »

У меня есть приложение Spring Boot, в котором нам нужно выполнить несколько http-вызовов к сторонней службе REST. Возможно, нам придется сделать 1 вызов или тысячи вызовов.
Я использую аннотацию @Async Spring Boot и CompletableFuture, примерно так:

Код: Выделить всё

    long start = System.nanoTime();
List list = new ArrayList();
List allFutures = new ArrayList();
for (int i = 0; i < 1000; i++) {
allFutures.add(httpClient.getStringAsync("Hello"));
}
List unwrappedFutures = allFutures.stream()
.map(CompletableFuture::join)
.flatMap(List::stream)
.collect(Collectors.toList());

list.addAll(unwrappedFutures);
long duration = (System.nanoTime() - start) / 1_000_000;
log.info("Done in {} msecs", duration);
Этому коду требуется около 2 минут, чтобы выполнить 1000 тысяч вызовов метода getStringAsync(), который имеет задержку в 1 секунду.
Это занимает столько же количество времени для обработки либо на моем ноутбуке, который, как показывает «Runtime.getRuntime().availableProcessors()», имеет 12 ядер, либо в кластере EKS, где количество ядер сейчас кажется одним.
Я думаю, мне нужно настроить ThreadPoolTaskExecutor так, чтобы чем больше ядер было доступно, тем меньше времени требовалось для обработки.
Однако я не совсем уверен, как это можно определить ядро, максимальный размер пула и емкость очереди.
Интересно, должен ли размер пула быть равен количеству элементов в списке? То есть, если в списке 1000 элементов, а это значит, что нам нужно сделать 1000 вызовов удаленного сервиса, нужно ли нам 1000 потоков? Кажется, это много.

Подробнее здесь: https://stackoverflow.com/questions/718 ... -pool-size
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»