1
0
mirror of https://github.com/golang/go synced 2024-11-26 12:58:06 -07:00
go/src/time
qmuntal cf52e70997 runtime: use a high res timer to signal io completion ports on windows
GetQueuedCompletionStatusEx has a ~16ms timeout resolution. Use a
WaitCompletionPacket associated with the I/O Completion Port (IOCP)
and a high resolution timer so the IOCP is signaled on timer expiry,
therefore improving the GetQueuedCompletionStatusEx timeout resolution.

BenchmarkSleep from the time package shows an important improvement:

goos: windows
goarch: amd64
pkg: time
cpu: Intel(R) Core(TM) i7-10850H CPU @ 2.70GHz
         │   old.txt    │               new.txt               │
         │    sec/op    │   sec/op     vs base                │
Sleep-12   1258.5µ ± 5%   250.7µ ± 1%  -80.08% (p=0.000 n=20)

Fixes #44343.

Change-Id: I79fc09e34dddfc49e0e23c3d1d0603926c22a11d
Reviewed-on: https://go-review.googlesource.com/c/go/+/488675
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Run-TryBot: Quim Muntal <quimmuntal@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
2024-02-19 15:44:49 +00:00
..
testdata
tzdata
embed.go
example_test.go time: fix typo in ExampleParseDuration 2024-02-13 01:05:00 +00:00
export_android_test.go
export_test.go
export_windows_test.go
format_rfc3339.go
format_test.go time: fix FuzzFormatRFC3339 nano comparison 2024-02-08 23:28:17 +00:00
format.go
genzabbrs.go
internal_test.go
mono_test.go
sleep_test.go runtime: use a high res timer to signal io completion ports on windows 2024-02-19 15:44:49 +00:00
sleep.go
sys_plan9.go
sys_unix.go
sys_windows.go
tick_test.go
tick.go
time_test.go
time.go runtime: use a high res timer to signal io completion ports on windows 2024-02-19 15:44:49 +00:00
tzdata_test.go
zoneinfo_abbrs_windows.go
zoneinfo_android_test.go
zoneinfo_android.go
zoneinfo_goroot.go
zoneinfo_ios.go
zoneinfo_js.go
zoneinfo_plan9.go
zoneinfo_read.go
zoneinfo_test.go
zoneinfo_unix_test.go
zoneinfo_unix.go
zoneinfo_wasip1.go
zoneinfo_windows_test.go
zoneinfo_windows.go
zoneinfo.go