0d076d92db
All encoding/decoding operations read the type cache to find the writer/decoder function responsible for a type. When analyzing CPU profiles of geth during sync, I found that the use of sync.RWMutex in cache lookups appears in the profiles. It seems we are running into CPU cache contention problems when package rlp is heavily used on all CPU cores during sync. This change makes it use atomic.Value + a writer lock instead of sync.RWMutex. In the common case where the typeinfo entry is present in the cache, we simply fetch the map and lookup the type. |
||
---|---|---|
.. | ||
decode_tail_test.go | ||
decode_test.go | ||
decode.go | ||
doc.go | ||
encode_test.go | ||
encode.go | ||
encoder_example_test.go | ||
iterator_test.go | ||
iterator.go | ||
raw_test.go | ||
raw.go | ||
typecache.go |