aboutsummaryrefslogtreecommitdiff
path: root/src/sync
diff options
context:
space:
mode:
authorMeng Zhuo <mzh@golangcn.org>2021-09-30 22:46:09 +0800
committerMeng Zhuo <mzh@golangcn.org>2021-10-07 14:01:52 +0000
commitecb2f231fa41b581319505139f8d5ac779763bee (patch)
tree9892a8ece179edd0a1a88273e271255d18295b62 /src/sync
parent6f74ed06c5b0e1d69fb70e89f31f002f18554c79 (diff)
downloadgo-ecb2f231fa41b581319505139f8d5ac779763bee.tar.gz
go-ecb2f231fa41b581319505139f8d5ac779763bee.zip
runtime,sync: using fastrandn instead of modulo reduction
fastrandn is ~50% faster than fastrand() % n. `ack -v 'fastrand\(\)\s?\%'` finds all modulo on fastrand() name old time/op new time/op delta Fastrandn/2 2.86ns ± 0% 1.59ns ± 0% -44.35% (p=0.000 n=9+10) Fastrandn/3 2.87ns ± 1% 1.59ns ± 0% -44.41% (p=0.000 n=10+9) Fastrandn/4 2.87ns ± 1% 1.58ns ± 1% -45.10% (p=0.000 n=10+10) Fastrandn/5 2.86ns ± 1% 1.58ns ± 1% -44.84% (p=0.000 n=10+10) Change-Id: Ic91f5ca9b9e3b65127bc34792b62fd64fbd13b5c Reviewed-on: https://go-review.googlesource.com/c/go/+/353269 Trust: Meng Zhuo <mzh@golangcn.org> Run-TryBot: Meng Zhuo <mzh@golangcn.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/sync')
-rw-r--r--src/sync/pool.go4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/sync/pool.go b/src/sync/pool.go
index 1ae70127ac..9802f29d6f 100644
--- a/src/sync/pool.go
+++ b/src/sync/pool.go
@@ -71,7 +71,7 @@ type poolLocal struct {
}
// from runtime
-func fastrand() uint32
+func fastrandn(n uint32) uint32
var poolRaceHash [128]uint64
@@ -92,7 +92,7 @@ func (p *Pool) Put(x interface{}) {
return
}
if race.Enabled {
- if fastrand()%4 == 0 {
+ if fastrandn(4) == 0 {
// Randomly drop x on floor.
return
}