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
ZIO Runtime System Improvements (2.1 candidate) #8582
Merged
Merged
Conversation
This file contains 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
adamgfraser
previously approved these changes
Dec 23, 2023
@adamgfraser Ready for final review |
adamgfraser
approved these changes
Dec 27, 2023
adamgfraser
added a commit
that referenced
this pull request
Jan 2, 2024
This reverts commit 0304398.
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.
I extracted a smaller subset of changes from my mega Loom PR that will be useful to all ZIO users, whether or not they are using Loom. In addition, I went far beyond the initial improvements to the runtime system, implementing a hybrid engine that prefers synchronous execution but can do asynchronous execution at almost no cost beyond a gen 2 runtime, and switching from exceptions for errors to Exit values, which turns out to result in slightly less boxing given the other changes.
The code is much cleaner and easier to understand and there are probably a few more changes I will push over the weekend before it's ready to merge, but I want to get it on CI to ensure the build and all tests are passing on all platforms.
Note that fork/join performance is still in need of substantial optimization. Although medium to long-lived fibers will not benefit from this work, a lot of benchmarks fork a single effect or so, and so the overhead of fork/join is noticeable on these benchmarks. I am not planning on doing that work as part of this PR as there is no single culprit, just a lot of little micro-optimizations everywhere.