r*****e 发帖数: 30 | 1 有一个接口叫
void setRPS(int num);
接下来不断有request过来,如何实现下面的接口,返回accept或者deny,
bool process(int timestamp){
}
有什么好的想法吗 |
y*****i 发帖数: 141 | |
m*****k 发帖数: 731 | 3 control request number within a second |
x*******9 发帖数: 138 | 4 单线程多线程?
用一个双端队列存时间信息,然后每次有新请求来的时候维护一下。
不过对多线程不适用。 |
l*******0 发帖数: 95 | 5 This is a question about concurrency, the following code may work. Hope it's
helpful.
public class Solution {
AtomicInteger count = new AtomicInteger(0);
Integer limit = 0;
Integer startTimestamp = -1;
void setRPS(int num) {
limit = num;
}
bool process(int timestamp){ // suppose timestamp is ms
synchronized {
if(count.get() < limit) {
count.incrementAndGet();
return true;
} else if (timestamp - startTimestamp >= 60 * 1000) {
count.set(1);
startTimestamp = timestamp;
return true;
}
}
return false;
}
} |
e***m 发帖数: 92 | 6 Google的Guava里提供了一个RateLimiter的class,可以做参考
【在 r*****e 的大作中提到】 : 有一个接口叫 : void setRPS(int num); : 接下来不断有request过来,如何实现下面的接口,返回accept或者deny, : bool process(int timestamp){ : } : 有什么好的想法吗
|
w********8 发帖数: 55 | 7 请假大牛,这个题跟consumer producer有关系吗? |