gpt4 book ai didi

java - 为什么计数器是 double 而不是 long?

转载 作者:行者123 更新时间:2023-12-01 19:35:08 24 4
gpt4 key购买 nike

Micrometer counter 的动机是什么?是双的,不是长的?用户是否有理由计算部分更改?在计数超过尾数大小(我认为约为 20 亿)后,它如何继续测量增量?

更新:有人指出,double 的精度为 9 千万亿,而不是 20 亿。这样可以腾出更多空间。

最佳答案

计数器采用 double 而不是长整数有多种原因。与任何架构一样,它会平衡权衡。

与底层指标库的最大兼容性

Micrometer 是其他指标框架的外观,而 double 是最通用的选项。

例如,普罗米修斯使用 double 计数器,并通过坚持使用相同的类型,最大限度地提高兼容性。

Prometheus 使用 double 的另一个原因是在内部将所有指标视为相同,从而简化其架构并优化其性能和内存利用率。尽管这是一个不同的讨论主题。

测量部分变化

虽然大多数计数器用途都是递增单个事件。在测量其他内容(例如接收的字节数、处理的行数等)时,计数器仍然是一个可行的选择。尽管这些示例都不是部分计数。它不会阻止用户提出想要测量部分计数的用例。一个例子可能是“处理所花费的秒数”,因为部分秒数在计算中非常常见。有些系统会测量整个单位,例如毫秒或纳秒,让我们接下来介绍一下。

最大精度

double 类型提供更高的精度。虽然这听起来可能违反直觉,但请耐心听我说。可以在计数器中测量的一些持续时间是执行某些任务所花费的总时间。垃圾收集、数据库处理等。其中一些事件需要纳秒。虽然我不推荐 Micrometer 作为分析器的替代品,但测量小时间单位会引起困惑(请参阅 Who Wants Seconds,Prometheus 工程师进一步解释了这一推理)

如果注册机构要对所有测量值进行纳秒标准化,那么这些数量级的长整型(长整型为 9 千万亿, double 为 9 千万亿)将耗尽整型的额外精度。反正很长。

您会注意到,Micrometer 使用 double 来测量计时器的总持续时间,该指标的优点在于它实际上是其核心的计数器(单调递增的数字)。

双人床足够大了

我记得做了一些粗略的数学计算,如果计数器正在测量单个事件,这意味着它可以在 20,000 多年的时间内每秒测量 10,000 个事件,并且不会开始失去精度。

因此,当然有一些需要注意的限制,但考虑到系统需求的预期,double 就足够了。

关于java - 为什么计数器是 double 而不是 long?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58068832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com