当前位置: 首页 > 面试题库 >

实际上,Go的时间有多精确?

壤驷安和
2023-03-14
问题内容

Go的时间包声称提供了纳秒级的精度。
http://golang.org/src/pkg/time/time.go

我想知道它是如何实现的以及我是否可以信任它。我的疑惑来自Python,该书清楚地记录了它随时间的困难和局限性:

来自
http://docs.python.org/2/library/time.html

各种实时函数的精度可能会低于表示其值或自变量的单位所建议的精度。例如,在大多数Unix系统上,时钟每秒仅“滴答”一声50或100次。

另一方面,time()和sleep()的精度优于Unix上的精度:时间以浮点数表示,time()返回可用的最准确时间(使用Unix
gettimeofday()),以及sleep()将接受一个非零分数的时间(Unix select()用于实现这一点,如果有的话)。

由于操作系统给python带来了如此艰巨的时间,因此Go如何实现其纳秒级精度?


问题答案:

至于实现,则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得到十亿分之一秒。但是,此问题现已解决。

如果要确定,请在运行时源代码中检查相应的实现,并询问操作系统的手册。



 类似资料:
  • 如果设备时间发生更改,如何以编程方式获取“当前(实际)时间”或“网络操作员的时间”? null

  • 我正在对10个用户运行一个简单的Jmeter测试,上升时间为30秒 - 这意味着每3秒就有1个用户在页面上。我得到的平均响应时间约为每页8秒,而实际上,无论我尝试多少,页面都会在2秒内加载。我不知道我应该如何使用Jmeter结果进行测量。这里的任何帮助都非常感谢。

  • 问题内容: 如何测量查询的执行时间而不测量等待锁释放等的时间?我唯一的想法是连续测量相同的查询并记录最快的时间。 问题答案: 使用启动分析器 然后执行查询。 用 您会看到分析器具有统计信息的查询列表。最后,您选择要检查的查询 或您查询的任何数字。 您得到的是一个列表,其中精确列出了查询期间花费了多少时间。 手册中的更多信息。

  • Go提供了对时间和一段时间的支持。这里有一些例子。 package main import "fmt" import "time" func main() { p := fmt.Println // 从获取当前时间开始 now := time.Now() p(now) // 你可以提供年,月,日等来创建一个时间。当然时间 // 总是会和地区联系在一起

  • 问题内容: 我真的对python中的sys.exit()感到困惑。在python文档中,它说“从Python退出”;这是否意味着在python程序中被调用时,进程将退出?如果是这样,下面的代码将显示不同的结果: 在linux中启动该程序,结果不是python文档所说的预期结果,但仍然可以在系统中运行,那么,真正的作用是什么? 问题答案: 根据文件提出: 通过提高SystemExit(status)

  • 问题内容: 为了解决我对goroutine的一些误解,我去了Go游乐场并运行了以下代码: 如我所料,Go操场出现了一个错误: 过程花费了太长时间 。 这似乎暗示在其中创建的goroutine 永远运行。 但是,当我在自己的机器上运行相同的代码时,几乎立即获得以下输出: 这似乎暗示主goroutine完成时,其中的goroutine将退出。 这是真的? 还是主goroutine完成,而其他gorou