Math 对Web流量的百分比进行采样

Math 对Web流量的百分比进行采样,math,web-traffic,Math,Web Traffic,我有一个问题,我相信我知道答案,但我希望得到一些验证。最近有人问我,他们如何对一定比例的网络流量进行随机抽样。他们想做的是通过展示不同的体验,以不同的方式对待5%的流量。我在基本层面上提出的建议类似于下面的代码 double rand = Math.random()*100; if(rand < 5){ //treat differently } 不过,对于Thread.sleep,命中率的百分比变化很大。我的假设是,我所经历的是一个数学极限,没有Thread.sleep运行的原

我有一个问题,我相信我知道答案,但我希望得到一些验证。最近有人问我,他们如何对一定比例的网络流量进行随机抽样。他们想做的是通过展示不同的体验,以不同的方式对待5%的流量。我在基本层面上提出的建议类似于下面的代码

double rand = Math.random()*100;
if(rand < 5){
    //treat differently
}

不过,对于Thread.sleep,命中率的百分比变化很大。我的假设是,我所经历的是一个数学极限,没有Thread.sleep运行的原因是,出于实际目的,它达到了“无限”数量的请求。我还假设,如果我们在生产中长期运行,我们的命中率最终也会达到5%。我的想法是否正确?提前谢谢。

这不清楚;你想用上面的代码发现什么?如果这只是一个测试,
rand<5
获得5%,那么随机睡眠的目的是什么?它肯定应该在5%左右。使用
Thread.sleep()
,您会得到什么结果?还要注意,您的睡眠时间在1到100毫秒之间,因此运行两分钟将得到1200到120000个请求,远远少于5800万个请求。在重新阅读你的问题之后,是的,你是对的,它基本上是一个极限——有点像“当请求接近无穷大时,百分比接近5”。@iamnotmaynard,最近我的睡眠水平在8%到2%之间变化。感谢您最近评论中的快速验证。
long runtime = 120000;
double requests = 0;
double hits = 0;
double rand = Math.random()*100;
long starttime = System.currentTimeMillis();

while(starttime + runtime > System.currentTimeMillis()){
    requests++;
    if(rand < 5){
        hits++;
    }
    rand = Math.random()*100;
    try{
        Thread.sleep((long)rand * 100);
    }catch(InterruptedException e){
    }
}

System.out.println(hits);
System.out.println(requests);
System.out.println(hits/requests);
2902723.0
5.8084512E7
0.04997413079755237