Java Virtual Thread에 대한 이해

세미나 준비중에 쉽게 오해할수 있을만한 부분인것 같아 따로 적어봄


Virtual Thread가 가진 가장 큰 장점은 아무래도 생성이나 스위칭이 가볍고 기존 시스템 쓰레드보다 훨씬 더 많이 생성이 가능하다는 점일것이다 (사실 적고나니 이게 다이긴 하네)

하지만 이 내용을 보고 단순히 "쓰레드를 훨씬 빠르고 많이 만들수 있으니 내 로직이 훨씬 빨라지겠는걸?" 이라고 생각한다면 Virtual Thread를 제대로 이해한것이 아니다


이를 이해하기 위해선 먼저 자바의 동시성(concurrency)과 병렬성(parallelism)에 대해서 알아야 한다

간단히 말해 동시성이란 여러 쓰레드가 동시에 돌아가는것 같아 보이는 것을 의미한다

반면, 병렬성은 정말 실제 물리적으로 동시에 실행되는 것을 의미하며 이는 CPU의 갯수와 추상화에 달려있고 그 갯수가 생각보다 많지는 않다

그럼에도 우리는 하나의 프로그램에서 수십 혹은 수백개의 쓰레드를 생성하여 동작시키고 있다

이런 의미에서 Virtual Thread가 단순히 더 가볍고 더 많이 생성된다고 해서 프로그램의 성능에 도움을 주는 것은 아니다


Virtual Thread가 실질적으로 도움을 줄수 있는건 파일 입출력이나 network I/O와 같은 I/O-bound 작업에서 대기 시간이 발생했을때 실질적인 도움을 줄수 있다

예를 들어 시스템 제약으로 10개의 시스템 쓰레드만 사용이 가능한 환경에서 1초가 걸리는 외부 호출을 수행해야 하는 로직이 있다면 성능은 대략 1초당 10건에 조금 못미칠 것이다

이런 조건에서 Virtual Thread 를 사용하면 외부 호출의 응답을 기다리는 동안 추가적인 쓰레드가 계속적으로 생성이 되고 동작하면서 성능이 크게 향상될수 있다

반대로 이러한 I/O-bound 로직이 아닌 CPU-bound 로직에 대해서는 Virtual Thread를 사용한다고 하더라도 성능적인 개선이 크게 이루어지지는 않을것이다


(그나저나 요즘은 Virtual Thread에 대한 사람들의 관심이 좀 줄어들었나.. 관련 피드가 별로 안보이네)


다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 8월 22일 오전 10:20

댓글 0

    함께 읽은 게시물

    ‘똑부(똑똑하고 부지런하기)보다 똑게(똑똑하지만 게으른) 리더가 되라.’ 리더십 코칭에서 빠지지 않는 훈수다. 현장 리더들의 말을 들어보면 실행이 쉽지 않다.

    ... 더 보기

    [김성회의 고사성어 리더십] `똑게 리더십` 3가지 법칙 - 매일경제

    매일경제

    [김성회의 고사성어 리더십] `똑게 리더십` 3가지 법칙 - 매일경제

     • 

    저장 4 • 조회 749


    defer, 에러 핸들링과 비동기에서 어떻게 활용할까?

    d

    ... 더 보기

    defer (async throwing contexts)

    iOYES

    defer (async throwing contexts)

    개발자는 개발만 잘하면 될까

    최근에 친구가 추천해준 데일 카네기의 인간관계론을 읽던 중 고액 연봉을 받는 엔지니어들의 특징에 대한 흥미로운 내용이 있었다.

    ... 더 보기

     • 

    저장 14 • 조회 2,664


    어제 AI 시대의 개발자 토론회에서 내가 대 AI 시대에는 버전관리 시스템이 필요없을 수도 있다고 생각해야한다는 말을 했는데, 그정도로 파격적인 생각을 해야한다는 이야기긴했지만, 진짜 그럴까?를 다시 한 번 생각해봤다.


    우선 버전관리 시스템의 목적은 크게 다음 세 가지다.


    ... 더 보기

    조회 1,747


    Next.js 프로젝트를 AWS EKS에 배포하며 배운 것들

    ... 더 보기

    쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

    product.kyobobook.co.kr

    쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

     • 

    저장 14 • 조회 1,392