RateStatistics这个类的作用为记录一个时间窗口内的速率值,并返回当前时间区域内的码率值。单独开一个文章主要是用来描述其用来记录速率值的桶,一开始看的比较迷糊。
|
|
数据结构主要分为三部分:
- 总的统计值,包括当前时间窗口内总的传输字节数和总的采样点个数。
- 当前时间窗口内的索引的初值,类似array[0]一样的存在,记录这个时间窗口内的第一个时间点及其对应的索引。
- 设置参数。
简单示例:
如上图中,假设原来基准点为t1, 窗口值为1000ms,此时的时间窗口范围为[t1, t1 + 999ms],此时新来的包将时间窗口的范围更新了,更新为[t1 + 3ms, t1 + 1002ms],此时需要从t1及对应的index开始遍历,将所有超过时间窗口下限的元素抛弃,此时新的时间窗口为[t1 + 3ms - 1000, t1 + 3ms],每一个bucket对应的时间点值也发生变化了(物理含义)。而对于插入一个节点则容易的多,只需要将该点的时间减去当前时间下限,其差值即为Bucket对应的下标。
原理弄明白了,代码也比较简单。
|
|