为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃尔雅 2023-08-16 18:21:47
千分尺计数器是双精度计数器而不是长计数器的动机是什么?用户是否有理由计算部分更改?当计数超过尾数的大小(我认为约为 20 亿)后,它如何继续测量增量?更新: 有人指出 double 的精度为 9 千万亿,而不是 20 亿。这样可以腾出更多空间。
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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

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

Micrometer 是其他度量框架的外观,double是最通用的选项。

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

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

测量部分变化

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

最大精度

double 类型提供更高的精度。虽然这听起来可能违反直觉,但请耐心听我说。可以在计数器中测量的一些持续时间是执行某些任务所花费的总时间。垃圾收集、数据库处理等。其中一些事件需要纳秒。虽然我不推荐使用 Micrometer 作为分析器的替代品,但测量小时间单位会引起混乱。

如果注册表要对所有测量值进行纳秒标准化,那么 a 的数量级long(长整型中的 9 千万亿与双精度中的 9 千万亿)无论如何都会耗尽长整型的额外精度。

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

双人间足够大

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

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


查看完整回答
反对 回复 2023-08-16
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信