diff options
| author | Russ Cox <rsc@golang.org> | 2017-02-17 10:17:42 -0500 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2017-02-24 15:34:01 +0000 |
| commit | a1261b8b0a38814df453defb2fc2cae3ba0c956a (patch) | |
| tree | a40724e7525ff029b75ed62e834da23e551f85e2 /src/runtime/time.go | |
| parent | a1ea91219faa7c35098ffbb958582897fcd33123 (diff) | |
| download | go-a1261b8b0a38814df453defb2fc2cae3ba0c956a.tar.xz | |
runtime: do not allocate on every time.Sleep
It's common for some goroutines to loop calling time.Sleep.
Allocate once per goroutine, not every time.
This comes up in runtime/pprof's background reader.
Change-Id: I89d17dc7379dca266d2c9cd3aefc2382f5bdbade
Reviewed-on: https://go-review.googlesource.com/37162
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'src/runtime/time.go')
| -rw-r--r-- | src/runtime/time.go | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/runtime/time.go b/src/runtime/time.go index c296338e9b..88ab8b9c02 100644 --- a/src/runtime/time.go +++ b/src/runtime/time.go @@ -50,7 +50,12 @@ func timeSleep(ns int64) { return } - t := new(timer) + t := getg().timer + if t == nil { + t = new(timer) + getg().timer = t + } + *t = timer{} t.when = nanotime() + ns t.f = goroutineReady t.arg = getg() |
