【问题标题】:How does java multithreading implement a limited number of operations within a specified time (interval)? [duplicate]java多线程如何在指定时间(间隔)内实现有限数量的操作? [复制]
【发布时间】:2019-11-22 12:06:54
【问题描述】:

问题描述:我有一个程序是多线程调用外部接口获取数据,现在对方只支持6000次/分钟访问。如果访问次数超过,则没有数据。如果减少线程数,则不会超过。但是,该程序需要更高的效率。我想最大化程序的速度。我想设计我的代码来控制一分钟内访问的次数(比如5800次),试了很多方法,查了很多资料还是不能实现。有没有这方面的实施计划或框架?

【问题讨论】:

  • 你能分享你的代码吗?您尝试了哪些方法?
  • 如果操作是 IO 绑定的,添加更多线程将无济于事。否则,您可以在 1 分钟内处理 6k 个请求,这意味着您每秒最多可以处理 100 个请求。如果每个请求需要 5 毫秒,您可以在一秒钟内处理 200 个请求。由于 200 将导致一半的请求不返回数据,因此根据增量/经过的时间通过一些 sleep 系统手动减慢它。知道单个线程可以处理多少个请求后,您可以相应地跨线程拆分请求以满足您的需求。
  • 搜索java throttle
  • 您目前是否以 6000(或更多)次/秒的速度轮询 相同的数据,或者您的用例是什么?另外,“更高的效率”是什么意思?
  • 非常感谢,我按照@Andreas 的指导解决了这个问题。 Stackoverflow 也有类似的问题。stackoverflow.com/questions/1407113/…

标签: java


【解决方案1】:

rxjava 框架支持https://rxmarbles.com/ 必须提供的所有运算符。您可能会使用它:通过创建一个接收虚拟事件的 Observable。

每个虚拟事件都会触发这样的休息调用。并且您使用适当的 rxjava 运算符根据您的时序要求生成这些事件。

当然,这与您通常使用该技术的方式相反。但事实是这些运算符非常强大且经过良好测试。您甚至可以(轻松)控制哪些线程将接收虚拟事件!

【讨论】:

  • 非常感谢,我按照@Andreas的指导解决了问题
猜你喜欢
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多