采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,Semaphore和RateLimiter根据他们的特性,都是可以用来限制并发,那么这两者有什么区别呢?
你好,Semaphore:信号量,直译很难理解。作用是限定只有抢到信号的线程才能执行,其他的都得等待!你可以设置N个信号,这样最多可以有N个线程同时执行。注意,其他的线程也在,只是挂起了。
RateLimiter是guava的,直译是速率限制器。其作用是 限制一秒内只能有N个线程执行,超过了就只能等待下一秒。注意,N是double类型。
前者控制的是同一时刻同时运行的线程数目,后者控制的是1s内允许执行的次数,效果上是不同的。
那假设要执行10万次数据库插入操作,使用RateLimiter进行限制,每秒运行执行300次,那么10万次操作在一秒内并发执行的的时候,剩余的99700次操作是不是会被丢弃?
可以控制丢弃或者慢慢处理,课程里有介绍这个
我没有留意到。。。如果有的话应该也是通过acquire或者tryAcquire来区别的吧,我看到Semaphore和RateLimiter都有这两个方法。那么,老师,如果要在某个数据库方法内限制执行次数,是不是使用RateLimiter更合理?
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.1k 15
3.5k 12
1.2k 12