Optimize fiber message queue draining#6437
Draft
coyaSONG wants to merge 1 commit into
Draft
Conversation
🦋 Changeset detectedLatest commit: a8a4717 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
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.
Type
Description
FiberRuntimestored pending fiber messages in an array and removed the first item withsplice(0, 1). Each dequeue shifted the remaining items, making a burst of N queued messages quadratic to drain.This replaces that array with Effect's existing unbounded
MutableQueueand usesoffer,poll, andisEmptythroughout the runtime. FIFO behavior and the existing scheduling logic are preserved, while enqueue and dequeue are constant-time. There is no public API change. A patch changeset is included.A local median benchmark for draining 60,000 no-op stateful messages changed from 274.125 ms on the untouched base to 3.563 ms with this patch (about 77x faster).
Validation:
corepack pnpm lint-fixcorepack pnpm checkcorepack pnpm buildcorepack pnpm docgenpnpm test run packages/effect/test/Fiber.test.ts packages/effect/test/Runtime.test.ts— 24 passedpnpm test run packages/effect/test— 6,210 passed, 7 skipped, 3 todo; one unrelatedBigDecimal/clampBigDecimalassertion failed locally under both Node 25 and Node 24. The test, helper, and BigDecimal source are unchanged by this PR, and the current upstream base Check run is green.Development note: the implementation and PR text were prepared with AI assistance and validated with the repository checks above; no human review is claimed.
Related