-
runBlockingBackEnd/coroutine 2025. 5. 5. 10:00반응형
runBlocking
runBlocking 함수는 이 함수를 호출한 스레드를 사용해 실행되는 코루틴을 만들어냅니다. runBlocking 코루틴이 종료될 때 스레드 점유가 해제됩니다. 즉, 현재 스레드를 블로킹(중단)하여 코루틴 코드를 동기적으로 실행하는 함수입니다.
- runBlocking = Run(실행) + Blocking(차단)
주요 특징
- 현재 스레드를 블로킹: runBlocking { ... } 블록 내 모든 작업이 끝날 때까지 해당 스레드를 멈춥니다.
- 코루틴 월드로 진입: 일반 함수(main 등)에서는 launch, async 같은 코루틴 빌더를 바로 사용할 수 없습니다. runBlocking을 사용하면 코루틴 스코프가 생성되어, 그 안에서 launch, async 등 코루틴 관련 함수를 사용할 수 있습니다.
- 테스트나 진입점에서 주로 사용: main 함수, 단위 테스트 등 코루틴이 아닌 환경에서 코루틴을 실행할 때 주로 사용합니다. 앱의 UI 스레드 등에서 남용하면 성능 저하와 응답 불능이 발생할 수 있으니 주의해야 합니다.
- CoroutineScope의 확장 함수가 아님: launch, async 등과 달리 runBlocking은 CoroutineScope의 확장 함수가 아니라, 스스로 코루틴 스코프를 만들어 실행합니다.
다음은 main 함수에서 runBlocking을 사용해 코루틴 스코프를 만들고, launch를 사용해 새로운 코루틴을 생성하는 코드입니다.
import kotlinx.coroutines.* fun main() = runBlocking<Unit> { println("[${Thread.currentThread().name}] runBlocking 코루틴 시작") launch { println("[${Thread.currentThread().name}] launch 코루틴 시작") delay(500L) println("[${Thread.currentThread().name}] launch 코루틴 종료") } delay(1000L) println("[${Thread.currentThread().name}] runBlocking 코루틴 종료") }
- runBlocking은 main함수에서 코루틴을 동기적으로 실행
- launch로 시작된 코루틴은 runBlocking 내에서 비동기로 동작
- delay로 코루틴을 일시 중지할 수 있지만, 스레드는 블로킹되지 않음
반응형'BackEnd > coroutine' 카테고리의 다른 글
Coroutine 순차 처리 (0) 2025.05.09 CoroutineDispatcher (0) 2025.05.06 Coroutine 등장 배경 (0) 2025.05.03