[코루틴 테스트 심화] runTest의 스레드 관련 문의
안녕하세요 강사님!
강의 복습 중에 runTest 관련 문의가 있어서 다음과 같이 질문을 남기게 됐습니다.
코루틴 테스트 심화강의의 4:07초에 시작되는 부분을 보면 runTest를 호출해 실행되는 코루틴은 메인 스레드를 사용한다라고 해주셨습니다.

제가 실제로 runTest를 이용해 코드를 실행시켜 보니 Test worker스레드를 사용하고 있다고 나왔습니다.
실행 코드
@Test
fun `메인 스레드만 사용하는 runTest`() = runTest {
println("[${Thread.currentThread().name}] 메인 시작")
delay(100)
println("[${Thread.currentThread().name}] 메인 종료")
}결과
[Test worker @kotlinx.coroutines.test runner#2] 메인 시작
[Test worker @kotlinx.coroutines.test runner#2] 메인 종료
실제 사용되는 스레드는 Test worker 스레드 이지만, 테스트 코드에서 실행될 때 Test worker 스레드가 메인 스레드 처럼 동작하기 때문에 메인이라고 말씀해주신 걸까요??
감사합니다!
回答 2
2
denia park 님 안녕하세요. 지식 공유자 조세영입니다.
runTest는 기본적으로 테스트 환경에서 실행되며, 코루틴 테스트 환경에서 메인 스레드 처럼 동작하는 Test worker 스레드에서 동작합니다. 이 부분은 조금 설명이 잘못 된 부분이 있는 것 같습니다. runTest 함수가 호출되면, runTest로 만들어진 코루틴이 완료될 때까지 호출된 스레드를 점유하고 블로킹하는데요. 이 부분에서는 메인스레드에서 runTest가 호출되었습니다.
즉, runTest는 Test worker 스레드에서 실행되는 것이 맞고, 메인 스레드에서 runTest가 호출되기 때문에 코루틴이 실행 완료될 때까지 메인 스레드가 블로킹되게 됩니다. 따라서 위 설명은 다음과 같이 수정되는 것이 맞습니다.
runTest를 호출해 실행되는 코루틴은 호출 스레드를 블로킹하며, 내부의 모든 코루틴이 실행 완료될 때까지 종료를 방지한다.
이 부분은 빠른 시일 내에 조금 더 명확한 설명으로 대체할 수 있도록 하겠습니다. 질문 주셔서 감사합니다.
CoroutineDispatcher에 대한 질문
0
79
2
코루틴과 JVM이 끝나는 조건에 대해 문의 드립니다.
0
83
2
Job() 생성후 complete을 불러 주어야 하는 경우가 헷깔립니다.
1
66
1
왜 runBlocking 종료로 메인스레드가 종료될까요?
0
120
1
cancel 질문드립니다.
1
85
2
delay 함수 사용 시 스레드 양보
1
127
2
강사님께서 번역해주신 코틀린 코루틴 공식 가이드 문서 문의
2
149
2
Flow와 Channel
1
146
2
[코틀린 코루틴의 정석 책 추첨 이벤트] 강의 구매 기간 관련 문의
1
221
1
job과 코루틴의 관계?
3
257
2
코루틴의 blocking I/O작업 처리
0
161
2
KTOR Server 에서 delay
0
136
2
CoroutineDispatcher(Default, IO)의 limitedParallelism 관련 질문
1
241
1
suspend 문의 드려요
2
131
2
스레드 양보 예제 + 코루틴/멀티스레드 사용 예시 질문
1
184
2
coroutineScope 관련 질문 및 실제 사용 사례에 대한 질문
1
258
3
Coroutine 취소 시점 체크
1
139
2
spring web mvc 환경에서 coroutine을 사용해보신 경험이 있으신지 궁금합니다.
1
323
2
코루틴이 멀티스레드의 단점을 해결했다는 부분에 대해 질문드립니다.
2
181
1
Dispatcher.IO의 동작원리
0
254
3
실무에서 runBlocking 와 CoroutineScope 실무 사용에 대해
0
238
2
Code3-6에서 imageProcessingDispatcher가 inline으로는 동작하지 않는 이유가 궁금합니다
1
121
2
공유 스레드 풀 질문드려요!
1
158
2
코루틴 이름 출력관련해서 질문이 있습니다!
2
160
1

