]> Cypherpunks repositories - gostls13.git/commit
regexp: use sync.Pool to cache regexp.machine objects
authorJavier Kohen <jkohen@google.com>
Tue, 20 Mar 2018 18:35:37 +0000 (14:35 -0400)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 3 Apr 2018 16:03:19 +0000 (16:03 +0000)
commit7dbf9d43f5a62a604ab3e6ceb1ee7ac4f3a80d80
tree98e50e6fb4f4c1ba1a5bb8de97d31ac804721eb2
parentdaa2d547734a3e5693b06d7d09e38ff1e617c89f
regexp: use sync.Pool to cache regexp.machine objects

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/101715
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
src/regexp/regexp.go