-
Vritual Thread - Kakao tech meetSpring/Framework 2023. 12. 12. 19:21
2024-12-12 Kakao tech meet 에서 Virtual Thread 를 다루었습니다
이번 동영상을 보며알게 되었는데,
지난 Virtual Thread 공부시 참고한 Soo Story 저자님이 카카오 안정수(James.star) 님이였습니다

JDK 21의 신기능 Virtual Thread 알아보기
Kakao Tech Meet #4 | Festa!
Festa에서 당신이 찾는 이벤트를 만나보세요.
festa.io
(1) JDK 21의 신기능 Virtual Thread 알아보기
JDK 21(LTS)에서 소개된 새로운 기능 중 주목받고 있는 Virtual Thread에 대해서 소개합니다. Virtual Thread가 탄생한 배경과 목적, 구조, 사용법, 주의사항에 대해서도 알아봅니다.
Java 또는 Kotlin을 다루는 서버 개발자 중 애플리케이션의 처리량(Throughput)을 높이는 데 관심 있는 분들이라면 누구나 들으시길 추천합니다.#java #Kotlin #jdk21 #virtualthread
목차
•Virtual Thread란 무엇인가?
•탄생 배경
•해결하고자 하는 문제
•Virtual Thread의 구조
•사용 방법
•성능 테스트
•생각해 볼 점발표자: 안정수(@james.star) | 블로그
카카오에서 AI 플랫폼을 만드는 플랫폼 엔지니어링 업무를 맡고 있습니다. 새로운 것을 배우고 공부하는 일을 좋아합니다. 하루하루 조금 느리더라도 저만의 속도로 눈앞에 구덩이를 메우고 있습니다.https://www.youtube.com/watch?v=JZqF-QKY6GM












blocking 발생 ; CPU 이외의 작업 ( Network IO 등 )

blocking 된 thread 를 unmount 시키고

다른 쓰레드를 Mount 시킵니다

기존에는 Blocking 발생시 기다렸으나,
Virtual thread 는 다른 쓰레드로 바꾸어 작업하게 됩니다

사용법
오른쪽은 실행 결과

Spring Boot 3.2 이상에서 사용법
spring.threads.virtual.enabled: true3.0 ~ 3.1 에서 사용법
아래처럼 bean 을 등록하여 사용


기존 Thread 를 virtual thread 로 바꾼다고 생각하지 말고, Task 별로 Virtual Thread 에 할당한다고 생각하는게 좋습니다

Virtual Thread 를 수천, 수만개 만들고 ThreadLocal 사용을 남발하게 되면, Memory 이슈가 발생할 수 있습니다

synchronized 또는 jni navtive call 을 하면 carrier thread 를 타고 있는 상태에서 waiting 하기 때문에, virtual thread 효과가 없어지게 됩니다
코드 상태값 전이표에 보면, parked indefinitely on carrier 로 설명되어 있습니다
PARKING -> PINNED // cont.yield failed, parked indefinitely on carrierpinning 체크용 디버그 코드



Platform Thread : 199
- tomcat 의 기본 thread 가 200 이기 때문 <- 이걸 바꾸고 테스트 하셨어야 하지 않나요?
virtual thread 2975 ( 15배 )
성능테스트2


Platform Thread : 149
* database max connection 150 지정되었기 때문
Virtual Thread : 149

Tomcat 은 다 처리하고 3천 유저를 HikariPool 로 넘겼는데,
HikariPool 에서 처리못하고 TimeoutException 발생
→ overwhelming 이라고 부릅니다

tomcat 이 throttle(queue) 역할을 해 주었는데, Traffic 을 다 넘겼을 때 application 이 받아 주는지 고민하며 작성해야 합니다.

CPU Intensive 작업 ( image 처리, 동영상 인코딩) 에는 적합하지 않음



예 : DB 사용시 견딜 수 있는 connection 수 만큼만 traffic 이 넘어가도록


패널 토의
Java 21 의 사내 도입 계획이 있으신지?
시간이 지나면 점진적 도입, Java & Spring boot EOL 맞춰서 진행
Coroutine vs Virtual Thread ?
coroutine : compile level, 명시적으로 suspend fuction 을 지정하여 사용
virtual thread : jvm 차원 지원, continuation 기능으로 구현
'Spring > Framework' 카테고리의 다른 글
AnnotatedTypeMetadata - 어노테이션 정보 추출 (0) 2024.03.25 Condition - Bean 등록 여부를 조건부로 제어 (1) 2024.03.25 spring boot 3.2 - restclient & declarative http interface (4) 2023.12.03 Virtual Thread 알아보기 (3) 2023.11.29 references - declarative HTTP interface (0) 2023.11.18