One Thread - One Request
- Blocking I/O
- 코드 읽기 쉽고 디버깅 쉬움
- 확장성이 좋지 못하고, 스레드가 웨이팅하다보니 자원 낭비가 심해짐
One Thread - Many Request
- Non Blocking I/O를 곁들인
- 코드 짜기가 어렵고 디버깅이 어려움
Reactive
- webflux, RxJava
- 요청은 하나의 스레드와 강결합되지 않음
- 여전히 읽기도 어렵고 디버깅도 어려움
- Blocking 코드가 있으면 성능이 저하됨
- 이런 점으로 인해 webflux는 결국 주류가 되지 못함
Project Loom
- Virtual Thread, Scoped Values, Structured Concurrency
- Virtual Thread: JDK 21 정식 출시
- Virtual Thread는 왜 만들었을까?
- 기존의 요청 당 스레드 모델은 사용가능한 OS 스레드 수에 비례함
- JVM 쓰레드는 OS 쓰레드와 1:1 매핑
- 가상 스레드는 무한대로 생성 가능하고 비용 또한 저렴함
Virtual Thread