• Dmitriy Vyukov's avatar
    runtime: unify mutex code across OSes · ee24bfc0
    Dmitriy Vyukov authored
    The change introduces 2 generic mutex implementations
    (futex- and semaphore-based). Each OS chooses a suitable mutex
    implementation and implements few callbacks (e.g. futex wait/wake).
    The CL reduces code duplication, extends some optimizations available
    only on Linux/Windows to other OSes and provides ground
    for futher optimizations. Chan finalizers are finally eliminated.
    
    (Linux/amd64, 8 HT cores)
    benchmark                      old      new
    BenchmarkChanContended         83.6     77.8 ns/op
    BenchmarkChanContended-2       341      328 ns/op
    BenchmarkChanContended-4       382      383 ns/op
    BenchmarkChanContended-8       390      374 ns/op
    BenchmarkChanContended-16      313      291 ns/op
    
    (Darwin/amd64, 2 cores)
    benchmark                      old      new
    BenchmarkChanContended         159      172 ns/op
    BenchmarkChanContended-2       6735     263 ns/op
    BenchmarkChanContended-4       10384    255 ns/op
    BenchmarkChanCreation          1174     407 ns/op
    BenchmarkChanCreation-2        4007     254 ns/op
    BenchmarkChanCreation-4        4029     246 ns/op
    
    R=rsc, jsing, hectorchu
    CC=golang-dev
    https://golang.org/cl/5140043
    ee24bfc0
Name
Last commit
Last update
..
386 Loading commit data...
amd64 Loading commit data...
arm Loading commit data...
cgo Loading commit data...
darwin Loading commit data...
debug Loading commit data...
freebsd Loading commit data...
linux Loading commit data...
openbsd Loading commit data...
plan9 Loading commit data...
pprof Loading commit data...
windows Loading commit data...
Makefile Loading commit data...
append_test.go Loading commit data...
cgocall.c Loading commit data...
cgocall.h Loading commit data...
chan.c Loading commit data...
chan_test.go Loading commit data...
closure_test.go Loading commit data...
complex.c Loading commit data...
cpuprof.c Loading commit data...
debug.go Loading commit data...
error.go Loading commit data...
export_test.go Loading commit data...
extern.go Loading commit data...
float.c Loading commit data...
gc_test.go Loading commit data...
goc2c.c Loading commit data...
hashmap.c Loading commit data...
hashmap.h Loading commit data...
iface.c Loading commit data...
lock_futex.c Loading commit data...
lock_sema.c Loading commit data...
malloc.goc Loading commit data...
malloc.h Loading commit data...
mcache.c Loading commit data...
mcentral.c Loading commit data...
mem.go Loading commit data...
mfinal.c Loading commit data...
mfinal_test.go Loading commit data...
mfixalloc.c Loading commit data...
mgc0.c Loading commit data...
mheap.c Loading commit data...
mkasmh.sh Loading commit data...
mkgodefs.sh Loading commit data...
mkversion.c Loading commit data...
mprof.goc Loading commit data...
msize.c Loading commit data...
print.c Loading commit data...
proc.c Loading commit data...
proc.p Loading commit data...
proc_test.go Loading commit data...
rune.c Loading commit data...
runtime-gdb.py Loading commit data...
runtime.c Loading commit data...
runtime.h Loading commit data...
runtime1.goc Loading commit data...
sema.goc Loading commit data...
sema_test.go Loading commit data...
sig.go Loading commit data...
sigqueue.goc Loading commit data...
slice.c Loading commit data...
softfloat64.go Loading commit data...
softfloat64_test.go Loading commit data...
stack.h Loading commit data...
string.goc Loading commit data...
symtab.c Loading commit data...
symtab_test.go Loading commit data...
syscall_windows_test.go Loading commit data...
type.go Loading commit data...
type.h Loading commit data...