mirror of
https://github.com/golang/go
synced 2024-11-18 09:04:49 -07:00
context: avoid defer in the cancelCtx.Err method
name old time/op new time/op delta CheckCanceled/Err-4 53.5ns ± 2% 20.8ns ± 0% -61.05% (p=0.008 n=5+5) CheckCanceled/Done-4 44.4ns ± 1% 44.5ns ± 0% ~ (p=0.889 n=5+5) Change-Id: I2c68700a2b33f8feb3d307ce7c966590a3e960af Reviewed-on: https://go-review.googlesource.com/107137 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
e7b1d0a9cf
commit
0b9c1ad20d
@ -96,3 +96,21 @@ func buildContextTree(root Context, depth int) {
|
||||
root, _ = WithCancel(root)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkCheckCanceled(b *testing.B) {
|
||||
ctx, cancel := WithCancel(Background())
|
||||
cancel()
|
||||
b.Run("Err", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
ctx.Err()
|
||||
}
|
||||
})
|
||||
b.Run("Done", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
default:
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -334,8 +334,9 @@ func (c *cancelCtx) Done() <-chan struct{} {
|
||||
|
||||
func (c *cancelCtx) Err() error {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
return c.err
|
||||
err := c.err
|
||||
c.mu.Unlock()
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *cancelCtx) String() string {
|
||||
|
Loading…
Reference in New Issue
Block a user