perf(core): use BTreeMap for ResourceTable #10074
Merged
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.
Similar to #10073, this replaces
ResourceTable
's internalHashMap
with aBTreeMap
.Rationale
This follows a similar rationale to #10073, improved performance on "small" sets of integer keys. However I've split the PRs since their keys have different distributions and therefor different performance profiles. ResourceTable has higher key churn and likely a higher key-count in practice than OpState.
Benches
Future improvements
ResourceId distribution is very similar to PromiseId distribution (for apps that use resources), sequential integer keys with a practical sliding window of key relevance. So we could back the ResourceTable with a ring + fallback map design, which would likely be significantly faster than either HashMap or BTreeMap solo.