Go - time - 毫秒

bri*_*noh 5 go

我需要以毫秒为单位的时间来处理大量的事务,所以我想要一些正确且快速的东西.以下工作会做得最好吗?:


    iMilli  := int((time.Nanoseconds() % 1e6) / 1e3)
Run Code Online (Sandbox Code Playgroud)

TIA

las*_*owh 6

编辑:由于这个答案是第一次写的,逃逸分析代码已添加到Go编译器.这允许编译器在某些情况下避免不必要的分配,包括(可能)下面描述的那种情况.因此,对于最新的周期,使用更直接的time toNanoseconds()可能同样好.请自己进行分析.

大多数时候函数会导致堆分配(然后需要收集它,导致应用程序暂停).因此,如果你经常查看时间,听起来就像你一样,你需要直接使用syscall.Gettimeofday()(这是其他时间函数最终调用的函数).有关详细信息,请参阅此处的讨论:

http://groups.google.com/group/golang-nuts/browse_thread/thread/f2209022f43efcca?pli=1

我正在使用的解决方案是预先分配一个tv syscall.Timeval,每次通过我的内部循环我这样做:

syscall.Gettimeofday(&tv)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下内容获得毫秒:

(int64(tv.Sec)*1e3 + int64(tv.Usec)/1e3)
Run Code Online (Sandbox Code Playgroud)

我发现这比调用time.Nanoseconds()或其他更高级别的时间函数要好得多.