3 回答
TA贡献1829条经验 获得超7个赞
至于实现,则time.Now()
回退到运行时中实现的功能。您可以查看C时间实现以及time·now
程序集的实现(在这种情况下为Linux amd64)。然后使用clock_gettime
,可提供纳秒级的分辨率。在Windows上,这是通过调用来实现的GetSystemTimeAsFileTime
,它也会生成纳秒(不是那么高的分辨率,而是纳秒)。
因此,是的,分辨率取决于操作系统,您不能指望它在每个OS上都是准确的,但是开发人员正在尽力使其达到最佳状态。例如,在go1.0.3,time·now
为FreeBSD使用gettimeofday
代替clock_gettime
,其中仅提供精确到毫秒。通过查看存储在其中的值可以看到AX
它,因为它是syscall id。如果您查看引用的程序集,您可以看到 ms 值乘以 1000 以获得纳秒。但是,现在已解决此问题。
如果希望确定,请在运行时源代码中检查相应的实现,并询问操作系统的手册。
TA贡献1825条经验 获得超4个赞
Python的time.time函数的问题之一是它返回float。浮点数是具有53位精度的IEEE 754双精度数字。
由于现在距1970-01-01(纪元)已超过2 ** 30秒,因此您需要61(31 + 30)位精度来存储自1970-01-01以来的纳秒级时间。
不幸的是,这比python浮动存储的内容少了7或8位,这意味着python浮动总是不如go时间精确。
为了量化下面的演示,仅是由于float类型的限制,python时间最多精确到100nS 。
>>> t = time()
>>> t
1359587524.591781
>>> t == t + 1E-6
False
>>> t == t + 1E-7
True
因此,从an开始int64并以nS进行计数就没有这些限制,并且只限于基本操作系统的精度,这已由nemo很好地解释了。
- 3 回答
- 0 关注
- 258 浏览
添加回答
举报