Каков максимальный размер резьбы для SimpleAsyncTaskExecutor? - Весенняя партия - PullRequest
0 голосов
/ 23 марта 2020

Мне нужно выполнить большую работу по миграции и преобразовать много данных. По этой причине я реализовал SimpleAsyncTaskExecutor ...

Есть ли лучшая практика для ConcurrencyLimit?

public final String THREAD_MAX = 10;

@Bean
public TaskExecutor taskExecutor() {
       SimpleAsyncTaskExecutor asyncTaskExecutor = new SimpleAsyncTaskExecutor("spring_batch");
       asyncTaskExecutor.setConcurrencyLimit(THREAD_MAX);

       return asyncTaskExecutor;
}

1 Ответ

0 голосов
/ 23 марта 2020

Это в значительной степени зависит от типа нагрузки, которую вы генерируете. В основном это связано с процессором или IO?

Если он связан с процессором, вы ничего не получите, если у вас больше потоков, чем ядер процессора. На самом деле, вы потеряете из-за ненужных переключений контекста и ненужных затрат на планирование.

Если это связано с вводом-выводом, вам нужно поэкспериментировать, где, с учетом настроек вашего оборудования и точного типа нагрузки, можно найти точку параллелизма. это то, что дает самую высокую пропускную способность. Я бы начал с небольшого числа потоков di git, а затем удвоил его, чтобы быстро понять, как меняется пропускная способность в зависимости от количества потоков. Не удивляйтесь, если ваш лучший результат с довольно небольшим количеством потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...