请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Semaphore和RateLimiter有什么区别?

老师,Semaphore和RateLimiter根据他们的特性,都是可以用来限制并发,那么这两者有什么区别呢?

正在回答 回答被采纳积分+3

1回答

Jimin 2018-05-31 19:42:47

你好,Semaphore:信号量,直译很难理解。作用是限定只有抢到信号的线程才能执行,其他的都得等待!你可以设置N个信号,这样最多可以有N个线程同时执行。注意,其他的线程也在,只是挂起了。

RateLimiter是guava的,直译是速率限制器。其作用是 限制一秒内只能有N个线程执行,超过了就只能等待下一秒。注意,N是double类型。

前者控制的是同一时刻同时运行的线程数目,后者控制的是1s内允许执行的次数,效果上是不同的。

0 回复 有任何疑惑可以回复我~
  • 提问者 蝙蝠之殇 #1
    那假设要执行10万次数据库插入操作,使用RateLimiter进行限制,每秒运行执行300次,那么10万次操作在一秒内并发执行的的时候,剩余的99700次操作是不是会被丢弃?
    回复 有任何疑惑可以回复我~ 2018-05-31 20:40:08
  • Jimin 回复 提问者 蝙蝠之殇 #2
    可以控制丢弃或者慢慢处理,课程里有介绍这个
    回复 有任何疑惑可以回复我~ 2018-05-31 20:41:50
  • 提问者 蝙蝠之殇 回复 Jimin #3
    我没有留意到。。。如果有的话应该也是通过acquire或者tryAcquire来区别的吧,我看到Semaphore和RateLimiter都有这两个方法。那么,老师,如果要在某个数据库方法内限制执行次数,是不是使用RateLimiter更合理?
    回复 有任何疑惑可以回复我~ 2018-05-31 20:51:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信