From bbf7a1119a152db47e5c0c7a090273e1a4fd697f Mon Sep 17 00:00:00 2001 From: lxh-3260 <1906166914@qq.com> Date: Wed, 8 Jan 2025 15:18:26 +0800 Subject: [PATCH] =?UTF-8?q?ipconfig=20=E6=BB=91=E5=8A=A8=E7=AA=97=E5=8F=A3?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=B5=81=E9=87=8F=E6=AF=9B=E5=88=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ipconf/domain/window.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ipconf/domain/window.go b/ipconf/domain/window.go index 5e98fb4..ed7a0a4 100644 --- a/ipconf/domain/window.go +++ b/ipconf/domain/window.go @@ -1,7 +1,7 @@ package domain const ( - windowSize = 5 + windowSize = 5 // 防止流量毛刺,取5个点的平均值 ) type stateWindow struct { @@ -20,14 +20,16 @@ func newStateWindow() *stateWindow { } func (sw *stateWindow) getStat() *Stat { - res := sw.sumStat.Clone() + res := sw.sumStat.Clone() // 因为sumStat是指针,所以需要clone一份计算均值后返回 res.Avg(windowSize) return res } func (sw *stateWindow) appendStat(s *Stat) { - // 减去即将被删除的state - sw.sumStat.Sub(sw.stateQueue[sw.idx%windowSize]) + // 窗口大小没达到windowSize直接入窗,否则减去窗口最前面的state + if sw.idx >= windowSize { + sw.sumStat.Sub(sw.stateQueue[sw.idx%windowSize]) + } // 更新最新的stat sw.stateQueue[sw.idx%windowSize] = s // 计算最新的窗口和