reimplement string with shared_ptr instead of concrete macro#263
Closed
jingkaimori wants to merge 6 commits intomainfrom
Closed
reimplement string with shared_ptr instead of concrete macro#263jingkaimori wants to merge 6 commits intomainfrom
jingkaimori wants to merge 6 commits intomainfrom
Conversation
Contributor
|
@PikachuHy Could you spare some time to help us review this pr? |
Contributor
Author
|
Because of unnecessary spin lock, std::shared_ptr will not be used in lolly, see #326 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Motivation
Concrete struct (defined as
CONCRETEand*_rep) is used as reference counter. For example, typeTis implemented as two class:T_rephandles properties of given type, andThandles reference and counter of references toT_rep. WhenTis assigned, only reference is assigned with counter in/decreased.std::shared_ptrplays a similar role like concrete struct, and maintain a spin lock on reference count, thus avoid data-race in parallel execution environments. However, the spin lock drags performance down when code is executed in a single thread serially.Works
stringwithshared_ptrshared_ptrPerformance
Table below shows performance measured by
string_bench.Before
construct stringequality of stringcompare stringslice stringconcat stringappend stringis quotedAfter
construct stringequality of stringcompare stringslice stringconcat stringappend stringis quoted