Using Interlocked in InputFlowControl and Http2Stream #57968
+509
−99
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.
Using Interlocked in InputFlowControl and Http2Stream
Based on the comments of #57236 implementing interlocked in InputFlowControl.
Description
In
InputFlowControl
class the state is encoded byFlowControlState
. It uses a singlelong
value that can beInterlocked.CompareExchanged
.The operations of the previous
FlowControl
type are now implemented byInputFlowControl
type itself.There are two types of performance tests I executed. One in part of the PR as a standard BDN tests, and one type using the following
Tester
class, which is based on the previous discussions of this PR.In the results below:
Interlocked
.lock
.TryUpdateWindow
) was 'just' enough to not to run into this state but on different CPU adjusting these values might be necessary.Tester
class the higher the counter number, the more operations were performed.Executing the benchmarks with BDN (part of the PR):
BEFORE:
AFTER:
Fixes #56794