Replaced ReentrantLock with ConcurrentHashMap.computeIfAbsent()#3098
Closed
2tsumo-hitori wants to merge 1 commit intospring-cloud:mainfrom
Closed
Replaced ReentrantLock with ConcurrentHashMap.computeIfAbsent()#30982tsumo-hitori wants to merge 1 commit intospring-cloud:mainfrom
2tsumo-hitori wants to merge 1 commit intospring-cloud:mainfrom
Conversation
to improve performance in StreamBridge.send() method. - Avoids unnecessary locking overhead - Improves concurrency and reduces contention - Enhances throughput for high-load scenarios Signed-off-by: 2tsumo-hitori <[email protected]>
Contributor
|
Merged bb3324a |
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.
I believe that the
getStreamBridgeFunctionmethod operates in a scenario where the map does not contain a large number of entries, and the cache hit rate is likely to exceed 99%.Instead of using
ReentrantLockto lock the entire map on every access, it would be more efficient to leverageConcurrentHashMap.computeIfAbsent(),which allows direct retrieval of existing keys without locking and only acquires a lock when a key is missing to safely add a new entry.
This approach minimizes unnecessary contention, improves concurrency, and optimizes performance in high-throughput environments.
Benchmark Mode Cnt Score Error Units
MapBenchmark.testConcurrentHashMap avgt 10 7.363 ± 11.278 ms/op
MapBenchmark.testReentrantLock avgt 10 27.336 ± 0.597 ms/op
To validate this optimization, I conducted a performance benchmark comparing
ConcurrentHashMap.computeIfAbsent()andReentrantLock.The results clearly demonstrate that
ConcurrentHashMapsignificantly outperforms the lock-based approach