daadaadaah / my-java

1 stars 0 forks source link

[Virtual Thread] #44

Open daadaadaah opened 7 months ago

daadaadaah commented 7 months ago

Virtual Thread 란 무엇인가?

Virtual Thread의 등장배경이란 무엇인가요?

전통적인 Java의 Thread

스크린샷 2024-04-10 오후 5 55 42

Reactive Programming

Virtual Thread가 해결하고자 하는 문제

문제 1. 애플리케이션의 높은 처리량(throughput) 확보

Virtual Thread의 장점

스크린샷 2024-04-11 오후 2 17 39

Virtual Thread의 구조

기존 Thread 구조

스크린샷 2024-04-11 오후 2 22 43

Virtual Thread 구조

스크린샷 2024-04-11 오후 2 22 56

Virtual Thread 동작원리

Virtual Thread의 단점

Virtual Thread 사용법

자바코드

Spring Boot(MVC) 적용법

Virtual Thread 사용시, 유의사항

유의사항 1. 리소스라고 생각하지 말고, Task 별로 Virtual Thread 할당

유의사항 2. Thread Local 사용시 주의

유의사항 3. synchronized 사용시 주의

Virtual Thread 성능 테스트

성능 테스트 1 : 비즈니스 처리 로직에 thread가 blocking 되는 상황 가정

성능 테스트 2 : 쿼리를 직접 질의(예상 소요시간 1초로 가정)를 하는 상황

Virtual Thread 적합한 사용처

  1. I/O Blocking이 발생하는 경우, Virtual Thread가 적합하다.

  2. CPU Intensive 작업(예 : 이미지 프로세싱해서 썸네일 만들기, 동영상 인코딩 등)에는 적합하지 않다. -> 왜 적합하지 않지?

    • 만약 CPU에 종속적인 작업들(json 변환, 연산 등)만 존재한다면 성능이 개선되지 않는다. 왜냐하면 프로세서 코어가 실질적으로 스레드를 가지고 일을 하는데, 코어가 놀지 않고 계속해서 일을 한다면 스레드가 많다고 하더라도 코어가 부족하여 처리량이 향상될 수 없기 때문이다. 성능 향상은 I/O 작업에 의해 스레드가 블로킹될 때, 놀고 있는 코어를 활용해야 가능하다. 출처: https://mangkyu.tistory.com/309 [MangKyu's Diary:티스토리]
  3. Spring MVC 기반 Web API 제공시, 편리하게 사용할 수 있다.

    • 높은 Throughput을 위해서 Webflux를 고려중이라면 대안이 될 수 있다.

Virtual Thread vs Kotlin coroutine

Reference

daadaadaah commented 7 months ago

CPU Bound & I/O Bound

Bound 는 무슨 뜻인가?

CPU bound

CPU Bound의 개선 방안

  1. 클럭속도가 높은 CPU로 교체(비용 문제)
  2. 수행하는 일을 여러개로 쪼개서 여러 CPU를 동시에 사용
    • 일시적인 과다한 자원 사용
    • CPU Core의 수가 적다면, Context Switch 비용이 더 클 수 있음
  3. 수행하는 일의 크기를 줄이거나 로직이나 알고리즘 최적화

IO bound

IO Bound의 개선 방안

  1. 자원이 허락한다면 여러 디스크나 네트워크를 동시에 활용하도록 동시다발적 IO
  2. I/O Waiting으로 인해 묶인 스레드가 많아 스레드 자원을 효율적으로 사용할 수 없다면, 비동기 I/O 같은 방법을 고려해 볼 수 있다.
  3. 불필요한 I/O 데이터를 제거하거나 로직 개선으로 최적화, CPU 여유가 있다면, 압축을 하는 방법도 있음

Reference

daadaadaah commented 7 months ago

동시성

daadaadaah commented 7 months ago

병렬성

daadaadaah commented 7 months ago

Thread Pool

Reference

daadaadaah commented 7 months ago