单片机环形对接溢出如何处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机环形对接溢出如何处理相关的知识,希望对你有一定的参考价值。
参考技术A 处理方法:环形队列环形缓冲区通常有一个读指针和一个写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入
prometheus:prometheus如何处理数据类型溢出?
【中文标题】prometheus:prometheus如何处理数据类型溢出?【英文标题】:prometheus: how prometheus handles the data type overflow? 【发布时间】:2018-11-16 00:14:18 【问题描述】:prometheus 客户端不断更新指标,似乎不考虑溢出。比如计数器Add()
:
func (c *counter) Add(v float64)
if v < 0
panic(errors.New("counter cannot decrease in value"))
ival := uint64(v)
if float64(ival) == v
atomic.AddUint64(&c.valInt, ival)
return
for
oldBits := atomic.LoadUint64(&c.valBits)
newBits := math.Float64bits(math.Float64frombits(oldBits) + v)
if atomic.CompareAndSwapUint64(&c.valBits, oldBits, newBits)
return
c.valInt
会溢出并从 0 开始环绕。
prometheus 在抓取此类倒带指标时如何处理这种情况?
【问题讨论】:
【参考方案1】:Prometheus 旨在处理这样的计数器重置,rate
函数有它的代码。当进程重新启动时,这种情况更常见。
溢出也不太可能发生。即使你以每秒十亿的速度递增,也需要几百年才能溢出。
【讨论】:
histogram
类型的sum
呢?加法可能是任意大值,所以可能会很快溢出sum
。 github.com/prometheus/client_golang/blob/master/prometheus/…
类似的逻辑适用,只要您至少每十年重新启动一次应用程序就可以了。以上是关于单片机环形对接溢出如何处理的主要内容,如果未能解决你的问题,请参考以下文章