У меня есть список Процессов , и я хочу выполнить их как Десять процессов в минуту .
Я пытался ExecutorService
, ThreadPoolExecutor
, RateLimiter
но ни один из них не может поддержать мой случай, также я попытался RxJava
, но, возможно, я не могу понять, как правильно его реализовать.
Пример
У меня есть список Runnable
с размером 100K , каждый Runnable
имеет следующую логику:
- Извлечение данных из
rest api
. - Выполните некоторые вычисления на данных.
- Сохраните результат в базе данных.
Поэтому я использовал ExecutorService
с размером 10 и сделал Задержка (5 секунд) внутри Runnable#run()
чтобы управлять тем, что мне нужно «Десять процессов в минуту» , но все же, это не поддается управлению.
Суть этой логики - уменьшить количество запросов на rest api
.
ОБНОВЛЕНИЕ
Эффективно то, что мы ищем, это иметь верхний предел (по времени и количеству операций), а не равномерно распределять время по операциям.ss их индивидуальной пропускной способности.
т.е. если у меня есть список из 100 операций, который займет 0,5 секунды каждый, и у меня есть ограничитель скорости, который (после распределения) определил, что одна операция должна занять 0,8 секунды, тогдаесть интервал 0,3 секунды, который я могу использовать, чтобы начать новую операцию