【问题标题】:Make a thread generate fixed number of requests per second使线程每秒生成固定数量的请求
【发布时间】:2017-09-27 13:01:05
【问题描述】:

我正在以毫秒为单位进行计算,我真的不希望我的线程花费更多时间进行时间计算,而不是分配给它的工作。但是我想实现一些东西:

1- It should not generate more than n requests per second

2- If it has generated less, it should start at zero for the next second(obviously :D)

我正在尝试做一些性能基准测试,我的目标是让所有 CPU 只进行处理,而不是在每次请求后进行时间计算。大致上,我正在处理 08:36 - 171299 08:37 - 170970 08:38 - 163763 我想确保我在这里每分钟发出的请求数不超过160000。如何实现这是个问题。

提前致谢!

【问题讨论】:

  • 我认为你的机器(即使它是一个 GameBoy)可以轻松处理一个计算 à la 1000 / n 每秒。
  • 您真的应该发布一些代码,目前尚不清楚您要做什么以及如何尝试。听起来您想使用ScheduledThreadPoolExecutor。
  • @mumpitz 我不明白你的意思,我不会说这很有帮助......
  • 您应该看看 Guava 的 RateLimiter 并搜索有关如何使用它的示例。
  • @FilipMalczak 感谢您的批评,虽然它反过来不是很有帮助。尽管我的措辞很幽默,但我实际上试图说明一点:我不认为计算所需的延迟是一个大问题。您对这个问题的(老实说)回答确实包括幕后的相同计算 - 我认为这很好。无论如何,这是处理这个问题的好方法。朋友?

标签: java multithreading


【解决方案1】:

您可以结合ScheduledExecutorService 每秒运行一些代码,并结合this answer 为该代码设置超时。最后,应该有 1 秒超时的可运行文件应该最多生成 n 请求,如果超时,它将在下一秒开始使用新的上下文。

【讨论】:

  • 是的,这是我的想法。如果我每次都可以使用相同的线程池,我正在寻找方法。我可以这样做吗?或者我需要每秒超时线程并始终创建一个新线程?
  • ScheduledExecutorService 仍然是一个 ExecutorService - 我认为您可以使用同一个池来安排您将在超时中包装的代码段和实际任务本身。不过我不确定,我想这可能会导致一些问题。最坏的情况 - 保留两个池 - 一个用于调度,另一个用于“实际”工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
  • 2021-12-16
相关资源
最近更新 更多