gpt4 book ai didi

java - Guava RateLimiter 爆破

转载 作者:行者123 更新时间:2023-12-02 13:00:18 26 4
gpt4 key购买 nike

我一直在研究 throttle 系统,并偶然发现了 Guava RateLimiter。据我所知,它处理限制的两种主要方式是对溢出的请求进行排队(.acquire(...) 方法)或丢弃它们(tryAcquire(...) 方法)

我认为会有一个选项允许请求达到指定数量,并且仅在达到所述限制队列或丢弃请求后才允许。

例如:

public static void main( String[] args )
{
try
{
RateLimiter limiter = RateLimiter.create(5.0 );
//fictive call not saying it should be implemented this way
limiter.allowBursts(true);
for( int i = 0; i < 20; i++ )
{
Thread.sleep( 100 );
performOperation( limiter );
}
}
catch( InterruptedException e )
{
e.printStackTrace();
}
}

private static void performOperation( RateLimiter limiter )
{
if( limiter.tryAcquire() )
{
System.out.println( Instant.now() + ": Beep" );
}
}

这将打印出五声蜂鸣声,省略接下来的五声,然后再次打印五声

我是唯一一个认为这是一项有用的功能的人吗?还是我没有捕获重点?

测试代码由以下人员提供: Throttling method calls using Guava RateLimiter class

最佳答案

This would then print out five beeps, omit the next five and then print five again

添加固定大小的队列并不能真正使其以这种方式工作。

您以每秒 10 次的固定速率发出输入蜂鸣声,因此添加 5 个输入队列只会分摊最初的 10 声蜂鸣声,然后它将开始跳过所有其他蜂鸣声,如下所示:

1
2
3
4
5
6
7
8
9
10
12
14
16
18
20

这(除了那些第一个元素)与原始 RateLimiter 已经执行的操作没有什么不同:

1
3
5
7
9
11
13
15
17
19

此外,向 RateLimiter 添加队列将要求它开始接受异步任务,这听起来并不像是自然的 RateLimiter 职责,因此它可能会产生糟糕的设计。

关于java - Guava RateLimiter 爆破,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44325219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com