-
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 알아보기
(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: true
3.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 carrier
pinning 체크용 디버그 코드
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 등록 여부를 조건부로 제어 (0) 2024.03.25 spring boot 3.2 - restclient & declarative http interface (2) 2023.12.03 Virtual Thread 알아보기 (1) 2023.11.29 references - declarative HTTP interface (0) 2023.11.18