mirror of https://github.com/golang/go.git
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>
|
||
|---|---|---|
| .. | ||
| testdata | ||
| tzdata | ||
| embed.go | ||
| example_test.go | ||
| export_android_test.go | ||
| export_test.go | ||
| export_windows_test.go | ||
| format.go | ||
| format_rfc3339.go | ||
| format_test.go | ||
| genzabbrs.go | ||
| internal_test.go | ||
| mono_test.go | ||
| sleep.go | ||
| sleep_test.go | ||
| sys_plan9.go | ||
| sys_unix.go | ||
| sys_windows.go | ||
| tick.go | ||
| tick_test.go | ||
| time.go | ||
| time_test.go | ||
| tzdata_test.go | ||
| zoneinfo.go | ||
| zoneinfo_abbrs_windows.go | ||
| zoneinfo_android.go | ||
| zoneinfo_android_test.go | ||
| zoneinfo_goroot.go | ||
| zoneinfo_ios.go | ||
| zoneinfo_js.go | ||
| zoneinfo_plan9.go | ||
| zoneinfo_read.go | ||
| zoneinfo_test.go | ||
| zoneinfo_unix.go | ||
| zoneinfo_unix_test.go | ||
| zoneinfo_wasip1.go | ||
| zoneinfo_windows.go | ||
| zoneinfo_windows_test.go | ||