aboutsummaryrefslogtreecommitdiff
path: root/test/mallocfin.go
diff options
context:
space:
mode:
authorDmitriy Vyukov <dvyukov@google.com>2011-10-06 18:42:51 +0300
committerDmitriy Vyukov <dvyukov@google.com>2011-10-06 18:42:51 +0300
commitc14b2689f0d4e2250f4f57a5c2992c0a5e0f6823 (patch)
treef1ac1a31cdafa685557a14a5b3b326bd0cd92399 /test/mallocfin.go
parentad35cea7622a6fb839f06bb5b46cee9110fa94a0 (diff)
downloadgo-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.go10
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)