当前位置: 首页 > 面试题库 >

具有节流/吞吐量控制的Java执行器

亢正德
2023-03-14
问题内容

我正在寻找一个Java Executor,它允许我指定节流/吞吐量/节奏限制,例如,每秒最多可以处理100个任务-
如果提交了更多任务,则应将它们排队并在以后执行。其主要目的是避免在遇到外部API或服务器时遇到限制。

我想知道是基础Java(我怀疑,因为我检查过)还是其他可靠的地方(例如Apache
Commons)提供了此功能,还是我必须编写自己的Java。最好是轻巧的东西。我不介意自己编写它,但是如果某个地方有“标准”版本,我至少想先看看它。


问题答案:

看一下guavas
RateLimiter:

限速器。从概念上讲,速率限制器以可配置的速率分配许可证。如有必要,每个Acquisition()会阻塞,直到获得许可为止,然后再获取许可。一旦获得,便无需发放许可证。速率限制器通常用于限制访问某些物理或逻辑资源的速率。这与信号量相反,信号量限制并发访问的数量而不是速率(请注意,并发性和速率密切相关,例如,请参阅利特尔定律)。

它的线程安全,但仍然@Beta。仍然值得尝试。

您必须Executor针对速率限制器包装对的每个调用。对于更干净的解决方案,您可以为ExecutorService

从javadoc:

 final RateLimiter rateLimiter = RateLimiter.create(2.0); // rate is "2 permits per second"
  void submitTasks(List<Runnable> tasks, Executor executor) {
    for (Runnable task : tasks) {
      rateLimiter.acquire(); // may wait
      executor.execute(task);
    }
  }


 类似资料:
  • 我有一个类女巫负责向客户端发送数据,所有其他类在需要发送数据时都使用这个。让我们称之为“数据ender.class”。 现在客户端要求我们将吞吐量控制在每秒最多50次调用。 我需要在这个类上创建一个algoritm(如果可能的话),以保持当前秒的调用次数,如果它达到50的最大值,保持进程要么睡眠或某事,并继续而不丢失数据。也许我必须实现一个队列或比简单的睡眠更好的东西。我需要建议或遵循的方向。 为

  • 在我的测试计划中,我有24个吞吐量控制器,它们的执行率不同,最小的是1%。10个不同的吞吐量控制器有1%的执行率。每个吞吐量控制器下面都有许多事务控制器。当我运行一个测试1小时时,在某些最小百分比吞吐量控制器下定义的采样器甚至不会执行一次。我已经确保所有24个吞吐量控制器的总数增加到100%。如何确保在所有吞吐量控制器上定义的所有采样器至少执行一次? 对于吞吐量最少的控制器,我将其更改为“Tota

  • 我需要一些帮助来使用JMeter。我想记录两个不同的场景,比如单击两个不同的按钮。如果我尝试为两个用户运行,一个用户应该点击第一个按钮,另一个用户应该同时点击另一个按钮。 我知道这是一个基本问题。但我对这一点还不熟悉。这就是为什么在这里问。我试过如下方法: 当我使用CSV数据集配置与两个用户一起运行时,两个登录使用相同的用户。 我还需要测试并发性。我不知道如何正确地执行这个。有人能帮我吗?

  • 主要内容:创建JMeter测试计划,添加采样器,添加监听器,保存并执行测试计划,验证输出,添加吞吐量控制器,验证输出在本节中,我们将学习如何使用吞吐量控制器在JMeter中创建分布式负载测试计划。 出于测试目的,我们将在我们网站 www.yiibai.com 的URL下的某些网页上创建分布式负载。这些网页包括: 主页: www.yiibai.com 第1页(Java): www.yiibai.com/cplusplus/ 第2页(C语言): www.yiibai.com/cprogramming

  • 来自AWS Lambda常见问题解答: Q: 我一次可以执行的AWS Lambda函数的数量是否有限制? 不需要。AWS Lambda旨在并行运行多个函数实例。然而,AWS Lambda的默认安全限制为每个区域每个帐户100次并发执行。如果您希望提交请求以增加100次并发执行的限制,您可以访问我们的支持中心,单击“打开新案例”,然后提交服务限制增加请求。 Q: 如果我的帐户超过并发执行的默认限制,

  • 在大数据存储中,IOPS和吞吐量之间的关键区别是什么