diff options
author | Dmitriy Vyukov <dvyukov@google.com> | 2011-10-06 18:42:51 +0300 |
---|---|---|
committer | Dmitriy Vyukov <dvyukov@google.com> | 2011-10-06 18:42:51 +0300 |
commit | c14b2689f0d4e2250f4f57a5c2992c0a5e0f6823 (patch) | |
tree | f1ac1a31cdafa685557a14a5b3b326bd0cd92399 /test/mallocfin.go | |
parent | ad35cea7622a6fb839f06bb5b46cee9110fa94a0 (diff) | |
download | go-c14b2689f0d4e2250f4f57a5c2992c0a5e0f6823.tar.gz go-c14b2689f0d4e2250f4f57a5c2992c0a5e0f6823.zip |
runtime: faster finalizers
Linux/amd64, 2 x Intel Xeon E5620, 8 HT cores, 2.40GHz
benchmark old ns/op new ns/op delta
BenchmarkFinalizer 420.00 261.00 -37.86%
BenchmarkFinalizer-2 985.00 201.00 -79.59%
BenchmarkFinalizer-4 1077.00 244.00 -77.34%
BenchmarkFinalizer-8 1155.00 180.00 -84.42%
BenchmarkFinalizer-16 1182.00 184.00 -84.43%
BenchmarkFinalizerRun 2128.00 1378.00 -35.24%
BenchmarkFinalizerRun-2 1655.00 1418.00 -14.32%
BenchmarkFinalizerRun-4 1634.00 1522.00 -6.85%
BenchmarkFinalizerRun-8 2213.00 1581.00 -28.56%
BenchmarkFinalizerRun-16 2424.00 1599.00 -34.03%
Darwin/amd64, Intel L9600, 2 cores, 2.13GHz
benchmark old ns/op new ns/op delta
BenchmarkChanCreation 1451.00 926.00 -36.18%
BenchmarkChanCreation-2 3124.00 1412.00 -54.80%
BenchmarkChanCreation-4 6121.00 2628.00 -57.07%
BenchmarkFinalizer 684.00 420.00 -38.60%
BenchmarkFinalizer-2 11195.00 398.00 -96.44%
BenchmarkFinalizer-4 15862.00 654.00 -95.88%
BenchmarkFinalizerRun 2025.00 1397.00 -31.01%
BenchmarkFinalizerRun-2 3920.00 1447.00 -63.09%
BenchmarkFinalizerRun-4 9471.00 1545.00 -83.69%
R=golang-dev, cw, rsc
CC=golang-dev
https://golang.org/cl/4963057
Diffstat (limited to 'test/mallocfin.go')
-rw-r--r-- | test/mallocfin.go | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/test/mallocfin.go b/test/mallocfin.go index dc6d74bad6..ff62392473 100644 --- a/test/mallocfin.go +++ b/test/mallocfin.go @@ -47,18 +47,28 @@ func finalB(b *B) { nfinal++ } +func nofinalB(b *B) { + panic("nofinalB run") +} + func main() { runtime.GOMAXPROCS(4) for i = 0; i < N; i++ { b := &B{i} a := &A{b, i} + c := new(B) + runtime.SetFinalizer(c, nofinalB) runtime.SetFinalizer(b, finalB) runtime.SetFinalizer(a, finalA) + runtime.SetFinalizer(c, nil) } for i := 0; i < N; i++ { runtime.GC() runtime.Gosched() time.Sleep(1e6) + if nfinal >= N*8/10 { + break + } } if nfinal < N*8/10 { println("not enough finalizing:", nfinal, "/", N) |