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

[김동영] 5차 과제 제출 #25

Open
wants to merge 33 commits into
base: develop
Choose a base branch
from

Conversation

goalSetter09
Copy link
Member

요구사항

시간 측정 및 정리 글 작성

기존 코드 시간 측정

  • 3000 개의 스레드 동시 요청
Screenshot 2025-01-09 at 8 02 16 PM Screenshot 2025-01-09 at 8 03 20 PM Screenshot 2025-01-09 at 8 04 22 PM

성능 개선 및 시간 측정

DB Index 추가

Screenshot 2025-01-09 at 8 05 34 PM Screenshot 2025-01-09 at 8 05 51 PM #### Redis Cache 사용 Screenshot 2025-01-09 at 8 07 36 PM Screenshot 2025-01-09 at 8 08 16 PM

Virtual Thread 적용

Screenshot 2025-01-09 at 8 08 50 PM Screenshot 2025-01-09 at 8 09 04 PM

마지막 시도(Excel 저장에 Virtual Thread 사용)

Screenshot 2025-01-09 at 7 33 41 PM Screenshot 2025-01-09 at 7 35 42 PM

기존보다 2배 성능이 나빠졌습니다.
이유를 찾아보겠습니다.

기존: existsById() -> deleteById()
수정: findById() -> delete()
@goalSetter09 goalSetter09 changed the title Dongyoung [김동영] 5차 과제 제출 Jan 9, 2025
@yooooonshine
Copy link
Member

virtual thread의 경우,

virtual thread가 적용되기 전에는
os의 스레드와 스레드 풀 스레드가 1대1로 매칭되었고

virtrual thread는 이를 디커플링하는 것으로 알고있습니다.

위 예시에서는 서버에 요청을 딱 한번만 보낸 상황 같습니다!

그럼 기존의 스레드를 사용한다면

  1. OS 스레드가 생성된다.
  2. 스레드 풀 스레드랑 연결된다.
  3. 요청을 처리하는 동안 OS 스레드를 물고 있는다.

virtual thread를 사용한다면

  1. OS 스레드가 생성된다.
  2. 스레드 풀 스레드랑 연결된다.
  3. io요청을 처리하는 동안 OS 스레드를 물고 있지 않는다. OS 스레드는 다른 요청을 처리한다.
  4. virtual thread가 io작업이 끝났음을 인지하면 (이벤트 기반) OS스레드와 다시 연결을 맺는다.

위 상황에서 다른 요청들이 없기 때문에 성능 차이가 없어보이네요 ㅎㅎ..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants