Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support zero copy for object or array owned value #149

Merged
merged 13 commits into from
Jan 10, 2025

Conversation

Ggiggle
Copy link
Collaborator

@Ggiggle Ggiggle commented Jan 9, 2025

What type of PR is this?

feat: support zero copy for object or array owned value

Check the PR title.

  • This PR title match the format: <type>(optional scope): <description>
  • The description of this PR title is user-oriented and clear enough for others to understand.
  • Attach the PR updating the user documentation if the current PR requires user awareness at the usage level. User docs repo

(Optional) Translate the PR title into Chinese.

(Optional) More detailed description for this PR(en: English/zh: Chinese).

In the previous implementation, the copy overhead of the value data structure would increase as the value contained an owned array or an owned object.

The test conditions are:
environment: Apple M2 pro chip 12C, 3.5 GHertz; 32 G memory
data source: twitter.json, operation: after making one modification, copy 10 times continuously.
The test results are:
sonic_value
We can see that the overhead of sonic is 1.6 microseconds and the overhead of serde is 15 milliseconds.

In order to reduce the copy overhead here, use arc to reconstruct the owned array and object data structures, and only perform deep copies when modifications occur.

The new test results are:
zero_copy_sonic_value
We can see that the clone of sonic value overhead dropped from 1.6 microseconds to 260 nanoseconds.

(Optional) Which issue(s) this PR fixes:

(optional) The PR that updates user documentation:

src/value/from.rs Outdated Show resolved Hide resolved
src/value/from.rs Outdated Show resolved Hide resolved
Cargo.toml Outdated Show resolved Hide resolved
liuq19
liuq19 previously approved these changes Jan 10, 2025
@liuq19 liuq19 merged commit d0562bc into cloudwego:main Jan 10, 2025
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants