Skip to content
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

✨ Feat : Implements ConcurrentBatchCounter #34

Merged
merged 6 commits into from
Apr 5, 2024
Merged

Conversation

ooMia
Copy link
Contributor

@ooMia ooMia commented Apr 5, 2024

개요

  • 새롭게 정의한 ConcurrentBatchCounter 인터페이스에 대한 구현체

변경 사항

  • ✨ Feat : ConcurrentBatchingCounter
  • ✨ Feat : ConcurrentParameterizedBatchingCounter

추가 정보

  • 스레드 별 고유 ID로 분리하여 안정성 확보

ConcurrentParameterizedBatchingCounter

  • 임의의 Integer를 받는 식으로 구현
    • 배열의 크기가 커지면 메모리 이슈 발생
    • 내부 기준에 따라 flush하여 해결

ConcurrentBatchingCounter

  • YAGNI 원칙에 의거하여 최적의 구현체 고안
    • LongAdder로 연산 속도 개선

테스트

  • Virtual Thread와 OS Thread, 그리고 Sync/Async 각각의 방식으로 시도
    • 두 경우 모두 싱글 스레드 동작이 약 4배 빠름 (평균 10초)
    • OS Thread는 Thread 수에 비례하여 생성 오버헤드 증가
    • Virtual Thread는 수와 관계없이 일정 (평균 40초)

관련 이슈

Closes #33

ooMia added 5 commits April 5, 2024 08:59
- YAGNI 원칙에 따른 기능 최적화

Signed-off-by: Hyeon-hak Kim <hyeonhak.kim.dev@gmail.com>
- Async/Virtual: `newVirtualThreadPerTaskExecutor`
- Sync/OS: `newFixedThreadPool`
- Async/OS: `newCachedThreadPool` (삭제)

Signed-off-by: Hyeon-hak Kim <hyeonhak.kim.dev@gmail.com>
Signed-off-by: Hyeon-hak Kim <hyeonhak.kim.dev@gmail.com>
Signed-off-by: Hyeon-hak Kim <hyeonhak.kim.dev@gmail.com>
Signed-off-by: Hyeon-hak Kim <hyeonhak.kim.dev@gmail.com>
@ooMia ooMia added the enhancement New feature or request label Apr 5, 2024
@ooMia ooMia added this to the 스레드 동시성 제어 milestone Apr 5, 2024
@ooMia ooMia self-assigned this Apr 5, 2024
@ooMia ooMia changed the title [x] ✨ Feat : Implements ConcurrentBatchCounter ✨ Feat : Implements ConcurrentBatchCounter Apr 5, 2024
Copy link

codecov bot commented Apr 5, 2024

Codecov Report

Attention: Patch coverage is 70.76923% with 19 lines in your changes are missing coverage. Please review.

Project coverage is 79.13%. Comparing base (b77d483) to head (1bb0cc0).
Report is 12 commits behind head on develop.

Files Patch % Lines
.../batch/ConcurrentParameterizedBatchingCounter.java 0.00% 17 Missing ⚠️
...oncurrency/SpringThreadConcurrencyApplication.java 97.05% 0 Missing and 1 partial ⚠️
...rency/counter/batch/ConcurrentBatchingCounter.java 92.85% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@              Coverage Diff               @@
##             develop      #34       +/-   ##
==============================================
- Coverage      97.77%   79.13%   -18.65%     
- Complexity        22       38       +16     
==============================================
  Files              5        9        +4     
  Lines             45      115       +70     
  Branches           1        6        +5     
==============================================
+ Hits              44       91       +47     
- Misses             0       22       +22     
- Partials           1        2        +1     
Flag Coverage Δ
unittests 79.13% <70.76%> (-18.65%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Signed-off-by: Hyeon-hak Kim <hyeonhak.kim.dev@gmail.com>
@ooMia
Copy link
Contributor Author

ooMia commented Apr 5, 2024

실제 애플리케이션을 실행시켰을 때에는 일정 수준까지는 스레드 수에 따라 성능이 향상되었다.

특히, 현재 테스트 환경에서의 프로세서가 12th Gen Intel(R) Core(TM) i7-12650H, 2300Mhz, 10 코어, 16 논리 프로세서이기 때문에, 16개의 스레드를 활용하는 시점까지는 성능이 개선되는 것처럼 보이는 것을 알 수 있다.

image

테스트 환경에서는 싱글 스레드 성능이 4배 이상 높았다.
가상 스레드를 활용하면 스레드 생성 오버헤드가 적어, 수가 늘어나도 시간 차가 크지 않았다.

image

image

image

@ooMia ooMia merged commit 6d1377d into develop Apr 5, 2024
3 checks passed
@ooMia ooMia deleted the feature/counter branch April 5, 2024 11:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

1 participant