• Dmitriy Vyukov's avatar
    runtime: use lock-free ring for work queues · 4722b1cb
    Dmitriy Vyukov authored
    Use lock-free fixed-size ring for work queues
    instead of an unbounded mutex-protected array.
    The ring has single producer and multiple consumers.
    If the ring overflows, work is put onto global queue.
    
    benchmark              old ns/op    new ns/op    delta
    BenchmarkMatmult               7            5  -18.12%
    BenchmarkMatmult-4             2            2  -18.98%
    BenchmarkMatmult-16            1            0  -12.84%
    
    BenchmarkCreateGoroutines                     105           88  -16.10%
    BenchmarkCreateGoroutines-4                   376          219  -41.76%
    BenchmarkCreateGoroutines-16                  241          174  -27.80%
    BenchmarkCreateGoroutinesParallel             103           87  -14.66%
    BenchmarkCreateGoroutinesParallel-4           169          143  -15.38%
    BenchmarkCreateGoroutinesParallel-16          158          151   -4.43%
    
    R=golang-codereviews, rsc
    CC=ddetlefs, devon.odell, golang-codereviews
    https://golang.org/cl/46170044
    4722b1cb
proc.c 75.4 KB