Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How precise is Go's time, really?

Tags:

Go's time package claims giving a nanosecond precision. http://golang.org/src/pkg/time/time.go

I'm wondering how it is implemented and if I can trust it. My doubts come from Python, which clearly documents its difficulties and limitations with time:

From http://docs.python.org/2/library/time.html

The precision of the various real-time functions may be less than suggested by the units in which their value or argument is expressed. E.g. on most Unix systems, the clock “ticks” only 50 or 100 times a second.

On the other hand, the precision of time() and sleep() is better than their Unix equivalents: times are expressed as floating point numbers, time() returns the most accurate time available (using Unix gettimeofday() where available), and sleep() will accept a time with a nonzero fraction (Unix select() is used to implement this, where available).

Since the operating systems are giving such a hard time to python, how does Go achieve its nanosecond precision?

like image 878
Niriel Avatar asked Jan 30 '13 17:01

Niriel


People also ask

How accurate is GPS timing?

GPS is a much more accurate timing signal than radio based time transmissions. The GPS timing signal is typically accurate to 10 nanoseconds. However, most GPS receivers lose timing accuracy in the interpretation of the signal.

Is GPS time more accurate than NTP?

GPS accuracy is ~ 1 microsecond. NTP accuracy is ~ 100 milliseconds. GPS is more accurate than NTP and has less latency compared to NTP. clear sky, and after satellites are locked, the GPS master clock will send a signal every second to the slave clocks.

Does GPS have a delay?

The position accuracy is primarily dependent on the satellite position and signal delay. , or approximately 10 nanoseconds for the C/A code. Since GPS signals propagate at the speed of light, this represents an error of about 3 meters. or about 30 centimeters.

Is GPS 2021 accurate?

How accurate is a GPS device? The accuracy of most of the GPS devices is 2 meters CEP, Circular Error Probability, which means the device is accurate within two meters.


1 Answers

Well as for the implementation, time.Now() falls back to a function implemented in the runtime. You can review the C time implementation and the implementation for time·now in assembly (linux amd64 in this case). This then uses clock_gettime, which provides nano seconds resolution. On windows, this is realized by calling GetSystemTimeAsFileTime, which too generates nanoseconds (not as high res but nanoseconds).

So yes, the resolution depends on the operating system and you can't expect it to be accurate on every OS but the developers are trying to make it as good as it can be. For example, in go1.0.3, time·now for FreeBSD used gettimeofday instead of clock_gettime, which only offers millisecond precision. You can see this by looking at the value stored in AX, as it is the syscall id. If you take a look at the referenced assembly, you can see that the ms value is mulitplied by 1000 to get the nanoseconds. However, this is fixed now.

If you want to be sure, check the corresponding implementations in the runtime source code and ask the manuals of your operating system.

like image 142
nemo Avatar answered Sep 23 '22 08:09

nemo