인프런 커뮤니티 질문&답변

김태준님의 프로필 이미지

작성한 질문수

코틀린 코루틴 완전 정복

섹션 소개

Coroutine과 VirtualThread의 차이점에 대해질문드립니다

해결된 질문

24.10.06 23:24 작성

·

79

·

수정됨

1

안녕하세요
Coroutine 강의 잘듣고있는 수강생입니다 (_ _)

최근 JDK21의 VirtualThread관련해 찾아보게 되었는데요
Coroutine과 유사하게 Os단의 Thread를 점유하지 않고
Software적으로(?) 쓰레드에 작업분배를 하는점이 유사하다고 느꼈습니다 (잘못이해했다면 첨삭부탁드립니다 ㅠㅠ)

만약 제 이해가 맞다면, JVM레벨에서 제공하게되는 VirtualThread가 더 범용성이 높아보이는데 Coroutine의 사용이 유지가 될까요?

남아있게 된다면 Kotlin 언어차원에서의 사용성이 좋아서 일정도일지... 아니면 Coroutine이 VirtualThread와 다르게 차별화된 장점이 있을지 궁금합니다

감사합니다!

답변 1

2

조세영님의 프로필 이미지
조세영
지식공유자

2024. 10. 07. 01:14

태준님 안녕하세요. 조세영입니다.

코루틴이 Virtual Thread와 비교했을 때 어떤 장점이 있을지에 대해 질문 주셨는데요. 먼저 제가 Java를 사용한 지 시간이 조금 지나서 JDK 21에 도입된 Virtual Threads에 대해서는 개념적으로만 알고, 실제로는 사용해 보지 않았기에 답변이 다소 부족할 수 있음을 양해 부탁드립니다.

먼저 Virtual Threads는 가상 스레드를 생성해, 스레드 블로킹이 발생할 때 실제 스레드를 블로킹하는 대신 가상 스레드가 블로킹되며, 이를 통해 스레드 전환 비용을 줄이는 방식으로 동작합니다. 반면 코루틴은 일시 중단 지점을 가질 수 있는 작업 단위로, I/O 작업 같이 스레드가 계속해서 점유되지 않아도 되는 경우에는 스레드를 점유하지 않는 방식으로 작업을 최적화해 두 개념이 유사하게 느껴지실 수 있습니다.

하지만 이 둘은 다소 차이가 있습니다. Virtual Threads는 JVM 수준에서 제공되는 기본적인 기능인 반면, 코루틴은 더 높은 수준의 추상화를 제공하고, 안정적인 비동기 코드를 작성할 수 있는 다양한 기능을 갖추고 있습니다.

따라서 저는 이 둘이 상호 보완적으로 사용할 수 있다고 생각합니다. 예를 들어 Virtual Threads를 사용하여 경량 스레드를 관리하고, 그 위에 코루틴을 활용하여 구조화된 동시성이나 범위 기반의 작업 관리 같은 기능을 사용해 더 복잡한 비동기 처리 흐름을 유연하고 안정적으로 관리할 수 있을 것 같습니다.

또한, 코루틴은 Kotlin에 특화된 도구이기 때문에, Kotlin이 JVM을 넘어 다양한 환경에서 동작하는 점을 고려하면 계속해서 비동기 프로그래밍에 중요한 역할을 할 것으로 보입니다. 반면, Virtual Threads는 더 범용적인 Java 생태계에서 활용도가 높아질 것으로 보입니다. 따라서 저는 두 기술이 각자의 장점을 살려가며 함께 발전할 가능성이 크다고 생각합니다.
부족한 답변이지만 도움 되셨으면 좋을 것 같습니다. 감사합니다.