Automatically start new fiber for each request on PHP 8.1+#117
Merged
SimonFrings merged 2 commits intoclue:mainfrom Feb 17, 2022
Merged
Automatically start new fiber for each request on PHP 8.1+#117SimonFrings merged 2 commits intoclue:mainfrom
SimonFrings merged 2 commits intoclue:mainfrom
Conversation
4a5b088 to
f61d0e3
Compare
SimonFrings
approved these changes
Feb 17, 2022
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.
This changeset ensures X automatically starts a new fiber for each request on PHP 8.1+. This means you can now simply use
await()in your controller code without having to wrap anything in any explicitasync()calls anymore. This makes building and consuming async APIs easier than ever before.The first commit introduces a simple fiber implementation that works very similar to the
async()function, but without introducing any external dependencies. The second commit optimizes this approach to only return a promise on demand internally.Using fibers still shows a noticeable performance impact (~20% in my synthetic tests, but I invite more people to run their own benchmarks!), but there are still a number of outstanding optimizations that will improve this in the future. The optimization in the second commit already shows a ~35% performance improvement over using the simple
async()implementation and there's definitely room for similar improvements in other areas. I've already filed reactphp/async#30 upstream and will file more follow-up PRs once this is merged.The test suite also employs a couple of workarounds that will no longer be needed once reactphp/async#27 is addressed upstream. I've already prepared the required changes (talking 8+ hours of work here!) and will again file the PR once the above PR is merged.
Enjoy! 🚀
Builds on top of #116 and #62