Replace Mutex with RwLock in string interning code. #162
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When calling into egg from multiple threads, the
Mutex
used forSTRINGS
can become a bottleneck. (In my use case, I have a few hundred expressions that I'd like egg to simplify, so I do that using multiple threads.) In that context, I observed thategg::util::intern
was a significant fraction of total runtime and that more time was spent in it than in any of the rest of egg's code(!). Here is whatperf
on Linux reported:(Note that is in the context of a larger application; just over half of total runtime is in egg but that 43% is with respect to total runtime.) Total runtime for my test is 4.04s user, 14.22s sys.
This PR replaces the
Mutex
is replaced with a reader-writer lock.perf
reports roughly a 2x speedup:which is also reflected in the total runtime for my system going to 9.26s user, 0.21s sys.