Go的time包声称提供纳秒级精度。 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如何实现纳秒级精度呢?
clock_gettime
和nanosleep
的手册页面都说它们自Linux 2.6或更早以来就存在,并且POSIX 2001甚至更早,比如POSIX 1993。(https://man7.org/linux/man-pages/man3/clock_gettime.3.html / https://man7.org/linux/man-pages/man2/nanosleep.2.html)。古老的C函数`time()`和`sleep()`并不适合进行比较。 - Peter Cordes