[Java(자바)] Java 21 - Virtual thread

2024. 5. 12. 07:35·Java/Java

기존 vs. 21버전 스레드 모델

기존 Java 스레드 모델: Native Thread

  • 기존의 KLT(kernel-level thread)와 ULT(user-level thread)를 1:1 매핑하여 사용하는 JVM의 스레드 모델
  • Java의 유저 스레드를 만들면 Java Native Interface(JNI)를 통해 커널 영역을 호출하여 OS가 커널 스레드를 생성하고 매핑하여 작업을 수행하는 형태
    JNI: JVM에서 다른 언어를 사용할 수 있게 함. 메서드 앞에 native 키워드를 붙여 사용.
  • 기존 프로세스 모델을 잘게 쪼개 프로세스 내의 공통된 부분은 공유하면서, 작은 여러 실행단위를 번갈아 가면서 수행할 수 있도록 만듦
  • 커널 스레드와 유저 스레드가 매핑

단점

  • 메모리가 제한된 환경에서는 생성할 수 있는 스레드 수에 한계가 있었고, 스레드가 많아지면서 컨텍스트 스위칭 비용도 기하급수적으로 늘어나게 됨
  • 생성을 위해선 커널과 통신하여 스케줄링해야 하므로, 시스템 콜을 이용하기 때문에 생성 비용도 적지 않음
컨텍스트 스위치
Java의 스레드는 I/O, interrupt, sleep과 같은 상황에 block/waiting 상태가 되는데, 이때 다른 스레드가 커널 스레드를 점유하여 작업을 수행하는 것. 컨텍스트 스위칭 시 메모리 이동량이 큼

Java 21 스레드 모델: Virtual Thread

  • 여러 개의 가상 스레드를 하나의 네이티브 스레드에 할당하여 사용하는 모델
  • 더 많은 요청 처리량과 컨텍스트 스위칭 비용을 줄이기 위해 나타난 경량 스레드 모델
  • 플랫폼 스레드 위에서 여러 Virtual Thread가 번갈아 가며 실행되는 형태

장점

  • 컨텍스트 스위칭 비용이 저렴
  • JVM에 의해 생성되기 때문에 시스템 콜과 같은 커널 영역의 호출이 적고, 메모리 크기가 일반 스레드의 1%에 불과

단점

  • I/O 작업 없이 CPU 작업만 수행하는 경우, 오히려 플랫폼 스레드보다 성능이 떨어짐
    • 가상 스레드는 JVM에서의 컨텍스트 스위칭 오버헤드가 존재하기 때문
  • 메모리 누수 혹은 메모리 에러 발생 가능성 있는 Thread Local 사용 시 주의
저작자표시 비영리 변경금지 (새창열림)

'Java > Java' 카테고리의 다른 글

[Java(자바)] Stream(스트림)  (0) 2024.05.21
[Java(자바)] JVM(Java Virtual Machine)  (0) 2024.05.12
[Java(자바)] 자바의 Thread(쓰레드)  (0) 2024.05.12
[Java(자바)] 메모리 관리와 가비지 컬렉션  (0) 2024.05.12
[Java(자바)] Java 접근제어자  (0) 2024.05.12
'Java/Java' 카테고리의 다른 글
  • [Java(자바)] Stream(스트림)
  • [Java(자바)] JVM(Java Virtual Machine)
  • [Java(자바)] 자바의 Thread(쓰레드)
  • [Java(자바)] 메모리 관리와 가비지 컬렉션
주민1호
주민1호
개발/알고리즘 등등
  • 주민1호
    개발바라기별
    주민1호
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 🏚️
    • 🏷️
    • ✏️
    • ⚙️
    • All (40)
      • Data (0)
        • 💯DASP (0)
        • 💯SQLD (0)
        • 💯ADSP (0)
      • Java (17)
        • Java (11)
        • Spring Framework (6)
      • Python (0)
        • Python (0)
        • Flask (0)
        • TensorFlow (0)
      • JavaScript (1)
        • React (0)
        • Vue (0)
      • Lang (11)
        • C (11)
        • C++ (0)
      • Infra (0)
        • Docker (0)
        • Kubernetes (0)
        • AWS (0)
      • Algorithm (9)
      • 운영체제 (0)
        • Linux (0)
      • Etc. (1)
        • Git (1)
        • Network (0)
        • 컴퓨터과학개론 (0)
        • 멀티미디어시스템 (0)
      • AI (0)
      • Projects (0)
        • 2022 OSSCA (0)
      • Review (0)
      • 회고 (0)
  • hELLO· Designed By정상우.v4.10.3
주민1호
[Java(자바)] Java 21 - Virtual thread
상단으로

티스토리툴바