创新点,指数退避算法结合静态更新时间。
const maxBackoff = 10
func UpdateConf() {
//参考:二进制指数退避算法。
//优化:依据局部性原理,更新配置的一段时间内,还有可能再次更新配置;
backoff := 1
baseSleepTime := 6 * time.Second
expireActiveTime := 30
for {
systemTag := cli.Get(Tag)
if systemTag != lastTag {
UPDATE()
backoff = 1
expireActiveTime = 30
}
for i := 1; i <= backoff; i++ {
time.Sleep(baseSleepTime)
}
expireActiveTime--
if expireActiveTime < 0 && backoff < maxBackoff {
// backoff <<= 1
backoff++
expireActiveTime++ // prevent out range
}
}
}
...