单片机环形对接溢出如何处理

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/… 类似的逻辑适用,只要您至少每十年重新启动一次应用程序就可以了。

以上是关于单片机环形对接溢出如何处理的主要内容,如果未能解决你的问题,请参考以下文章

单片应用程序水平可扩展性(重复):如何处理数据库?

安卓开发蓝牙接收数据,返回数据如何处理

如何处理溢出的文本

NEON 如何处理溢出?

prometheus:prometheus如何处理数据类型溢出?

在类似 LMAX 的破坏者模式中,您如何处理缓慢的消费者?