]> Cypherpunks repositories - gostls13.git/commit
reflect: avoid lock for some NumMethod()==0 cases
authorDavid Crawshaw <crawshaw@golang.org>
Fri, 24 Jun 2016 15:09:48 +0000 (11:09 -0400)
committerDavid Crawshaw <crawshaw@golang.org>
Fri, 24 Jun 2016 18:01:08 +0000 (18:01 +0000)
commit3c6ed76da2feb45f8fba9177e9d6e0f19671353b
tree3a58a09a2c5504d756aeec4b69b9daaaf2bfa56c
parentf9d6b909b10e80d862932a935907e36c8cc24eeb
reflect: avoid lock for some NumMethod()==0 cases

The encoding/json package uses NumMethod()==0 as a fast check for
interface satisfaction. In the case when a type has no methods at
all, we don't need to grab the RWMutex.

Improves JSON decoding benchmark on linux/amd64:

name           old time/op    new time/op    delta
CodeDecoder-8    44.2ms ± 2%    40.6ms ± 1%  -8.11%  (p=0.000 n=10+10)

name           old speed      new speed      delta
CodeDecoder-8  43.9MB/s ± 2%  47.8MB/s ± 1%  +8.82%  (p=0.000 n=10+10)

For #16117

Change-Id: Id717e7fcd2f41b7d51d50c26ac167af45bae3747
Reviewed-on: https://go-review.googlesource.com/24433
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
src/reflect/type.go