【发布时间】:2019-07-14 07:30:20
【问题描述】:
我有 进程 的列表,我想像 每分钟十个进程那样执行它们。
我试过ExecutorService、ThreadPoolExecutor、RateLimiter,但没有一个能支持我的情况,我也试过RxJava,但也许我不知道如何正确实现它。
示例
我有一个大小为 100K 的Runnable 列表,每个Runnable 都有这个逻辑:
- 从
rest api检索数据。 - 对数据进行一些计算。
- 将结果保存到数据库中。
所以我使用大小为 10 的 ExecutorService 并在 Runnable#run() 内设置 延迟(5 秒) 来管理我需要的内容“每分钟十个进程",但仍然无法管理。
这个逻辑的要点是减少rest api上的请求。
更新
实际上,我们正在寻找的是有一个上限(在时间和操作数方面),而不是在各个操作之间平均分配时间,而不管它们各自的吞吐量如何。
即如果我有一个包含 100 个操作的列表,每个操作将花费 0.5 秒,并且我有一个速率限制器,而不是(分发后)确定单个操作应该花费 0.8 秒,那么我可以使用 0.3 秒的间隙来开始一个新的操作
【问题讨论】:
-
每分钟正好十个进程是什么意思?
-
我更新了我的问题。
-
你能分享你的代码吗(在一个简单的例子中)?
-
我有兴趣,RateLimiter 怎么解决不了这个问题?
RateLimiter.create((double) 10 / (double) 60)没有达到你想要的吗?你不需要runnables的均匀分布吗? -
实际上,我们正在寻找的是有一个上限(在时间和操作数方面),而不是在各个操作之间平均分配时间,而不管它们各自的吞吐量如何。即,如果我有一个包含 100 个操作的列表,每个操作需要 0.5 秒,并且我有一个速率限制器,而不是(分发后)确定单个操作应该花费 0.8 秒,那么我可以使用 0.3 秒的间隙来启动一个新的操作。
标签: java multithreading threadpool