inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코틀린 코루틴 완전 정복

섹션 소개

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

해결된 질문

374

김태준

작성한 질문수 17

1

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

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

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

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

감사합니다!

android kotlin coroutine kotlinx.coroutines android-coroutine

답변 1

4

조세영

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

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

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

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

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

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

CoroutineDispatcher에 대한 질문

0

89

2

코루틴과 JVM이 끝나는 조건에 대해 문의 드립니다.

0

100

2

Job() 생성후 complete을 불러 주어야 하는 경우가 헷깔립니다.

1

80

1

왜 runBlocking 종료로 메인스레드가 종료될까요?

0

131

1

cancel 질문드립니다.

1

96

2

delay 함수 사용 시 스레드 양보

1

141

2

강사님께서 번역해주신 코틀린 코루틴 공식 가이드 문서 문의

2

166

2

Flow와 Channel

1

156

2

[코틀린 코루틴의 정석 책 추첨 이벤트] 강의 구매 기간 관련 문의

1

233

1

[코루틴 테스트 심화] runTest의 스레드 관련 문의

1

172

2

job과 코루틴의 관계?

3

266

2

코루틴의 blocking I/O작업 처리

0

164

2

KTOR Server 에서 delay

0

139

2

CoroutineDispatcher(Default, IO)의 limitedParallelism 관련 질문

1

246

1

suspend 문의 드려요

2

137

2

스레드 양보 예제 + 코루틴/멀티스레드 사용 예시 질문

1

190

2

coroutineScope 관련 질문 및 실제 사용 사례에 대한 질문

1

270

3

Coroutine 취소 시점 체크

1

145

2

spring web mvc 환경에서 coroutine을 사용해보신 경험이 있으신지 궁금합니다.

1

333

2

코루틴이 멀티스레드의 단점을 해결했다는 부분에 대해 질문드립니다.

2

192

1

Dispatcher.IO의 동작원리

0

262

3

실무에서 runBlocking 와 CoroutineScope 실무 사용에 대해

0

255

2

Code3-6에서 imageProcessingDispatcher가 inline으로는 동작하지 않는 이유가 궁금합니다

1

125

2

공유 스레드 풀 질문드려요!

1

163

2