假设我要做的就是以特定速率(例如每秒1个)调用服务,那么Guava RateLimiter相对于简单的Thread.sleep(1000)有什么优势?

最佳答案

我不是RateLimiter专家,但无论如何我还是要指出以下几点:


RateLimiter的主要优点之一是当从多个位置(通常是在多个线程上)发出(或传入)请求时,它能够控制请求的速率。
如果要在单个线程上按顺序对该服务进行所有调用,则RateLimiter可能不是必需的……这比为其设计的情况要简单得多。
但是,(正如其他人所提到的),与Thread.sleep(1000)相比,它将准确地将您每秒限制在一个请求上会做得更好,因为这种睡眠并未考虑到完成任何工作所需的时间。提出要求。
对于我来说,目前还不清楚,您是在实际上尝试对服务的呼叫进行速率限制,还是您真正想要的是每秒执行一次的计划任务。如果是后者,则最好使用ScheduledExecutorServiceListeningScheduledExecutorService之类的东西。

关于java - 使用像Guava RateLimiter这样的库而不是简单的Thread.sleep有什么优势?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30980590/

10-09 06:09