java使用像Guava RateLimitor这样的库比使用简单线程有什么优势。睡觉 3 月,4 周 Questions & Answers 3010 假设我只想以特定的速率调用服务,比如说每秒1次,那么Guava RateLimitor比simple Thread.sleep(1000)有什么优势
# 1 楼答案 RateLimitor的要点是您将其作为被调用服务的一部分(或包装服务),这样它就可以保护自己不被频繁调用。您的线程睡眠选项必须由服务的客户端使用,因此您正在比较两种不同的东西 这里有一篇关于what you can do with RateLimiter的好文章
# 2 楼答案 使用RateLimiter,因为它正好适合您限制对服务访问的用例。除了从JavaDoc中: Rate limiters are often used to restrict the rate at which some physical or logical resource is accessed. 当然,您可以使用Thread.sleep,但是您要么必须自己编写跟踪服务上次调用时间的功能,要么必须不加区别地阻止服务的每次执行(可能在第一次或最后一次执行时不必要地阻止)
# 3 楼答案 区别在于延迟 调用线程的最简单方法。睡眠(1s)然后每个请求都会将每个请求的速度降低至少1s Guava速率限制器将在决定阻止之前检查已看到多少请求。因此,许多呼叫可能在相对无延迟的情况下接通 当然,可以编写比使用线程阻止每个请求的天真方法更智能的实现。睡觉然而,在这一点上,人们将重新发明番石榴方法
# 4 楼答案 我不是RateLimiter专家,但这里有几点我想说: RateLimiter的主要优点之一是,当请求从多个地方发出(或传入)时,它能够控制请求的速率,通常是在多个线程上李> 如果您在单个线程上顺序调用此服务,RateLimiter可能不是必需的。。。这是一个比设计时简单得多的案例李> 不过,(正如其他人所提到的)它会比Thread.sleep(1000)更准确地将你的请求限制在每秒一个请求上,因为睡眠并没有考虑到在发出请求时做任何工作所需的时间李> 我不清楚你是否真的试图限制你对该服务的呼叫,或者你真正想要的是每秒发生一次的预定任务。如果是后者,像^{}或^{}这样的东西可能更可取李>
# 1 楼答案
RateLimitor的要点是您将其作为被调用服务的一部分(或包装服务),这样它就可以保护自己不被频繁调用。您的线程睡眠选项必须由服务的客户端使用,因此您正在比较两种不同的东西
这里有一篇关于what you can do with RateLimiter的好文章
# 2 楼答案
使用RateLimiter,因为它正好适合您限制对服务访问的用例。除了从JavaDoc中:
当然,您可以使用
Thread.sleep
,但是您要么必须自己编写跟踪服务上次调用时间的功能,要么必须不加区别地阻止服务的每次执行(可能在第一次或最后一次执行时不必要地阻止)# 3 楼答案
区别在于延迟
调用线程的最简单方法。睡眠(1s)然后每个请求都会将每个请求的速度降低至少1s
Guava速率限制器将在决定阻止之前检查已看到多少请求。因此,许多呼叫可能在相对无延迟的情况下接通
当然,可以编写比使用线程阻止每个请求的天真方法更智能的实现。睡觉然而,在这一点上,人们将重新发明番石榴方法
# 4 楼答案
我不是
RateLimiter
专家,但这里有几点我想说:RateLimiter
的主要优点之一是,当请求从多个地方发出(或传入)时,它能够控制请求的速率,通常是在多个线程上李>RateLimiter
可能不是必需的。。。这是一个比设计时简单得多的案例李>Thread.sleep(1000)
更准确地将你的请求限制在每秒一个请求上,因为睡眠并没有考虑到在发出请求时做任何工作所需的时间李>