• Javier Kohen's avatar
    regexp: use sync.Pool to cache regexp.machine objects · 7dbf9d43
    Javier Kohen authored
    Performance optimization for the internals of the Regexp type. This adds
    no features and has no user-visible impact beyond performance. Copy now
    shares the cache, so memory usage for programs that use Copy a lot
    should go down; Copy has effectively become a no-op.
    
    The before v. after benchmark results show a lot of noise from run to
    run, but there's a clear improvement to the Shared case and no detriment
    to the Copied case.
    
    BenchmarkMatchParallelShared-4                        361           77.9          -78.42%
    BenchmarkMatchParallelCopied-4                        70.3          72.2          +2.70%
    
    Macro benchmarks show that the lock contention in Regexp is gone, and my
    server is now able to scale linearly 2.5x times more than before (and I
    only stopped there because I ran out of CPU in my test machine).
    
    Fixes #24411
    
    Change-Id: Ib33abff2802f27599f5d09084775e95b54e3e1d7
    Reviewed-on: https://go-review.googlesource.com/101715Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    7dbf9d43
Name
Last commit
Last update
..
syntax Loading commit data...
testdata Loading commit data...
all_test.go Loading commit data...
backtrack.go Loading commit data...
example_test.go Loading commit data...
exec.go Loading commit data...
exec2_test.go Loading commit data...
exec_test.go Loading commit data...
find_test.go Loading commit data...
onepass.go Loading commit data...
onepass_test.go Loading commit data...
regexp.go Loading commit data...