runBlocking

2024. 12. 7. 21:48·개념 저장소/coroutine

1. runblocking이란

runBlocking은 비동기 코드를 동기적인 환경으로 가져오는 역할을 한다.

 

launch, async, produce는 비동기 코드를 동기 코드처럼 사용할 수 있게 해주는 도구다. 반면 runBlocking은 비동기 코드를 완전히 동기 코드로 변환해주는 특별한 도구다.

 

예를 들어, 1초 동안 대기하는 delay(1000)이라는 비동기 함수가 있다. 이 함수는 코루틴 안에서만 사용 가능하기 때문에 동기 코드 환경에서는 실행할 수 없다. 하지만 runBlocking으로 delay(1000)을 감싸면 이 비동기 함수는 동기 코드처럼 실행된다. 이렇게 runBlocking은 비동기 작업을 동기적으로 사용할 수 있게 해준다.

2. 예제

import kotlinx.coroutines.*

fun main() {
    println("Task a: Start")
    println("Task b: Start")

    runBlocking {
        println("Task c: runBlocking Start")

        launch {
            delay(1000L)
            println("Task d: Coroutine 1 Complete")
        }

        launch {
            delay(500L)
            println("Task e: Coroutine 2 Complete")
        }

        println("Task f: runBlocking End")
    }

    println("Task g: Start")
}

// 출력
1. Task a와 Task b는 메인 스레드에서 순차적으로 실행된다.
2. Task c는 runBlocking 블록이 시작되면서 출력된다.
3. runBlocking 블록 내부에서:
    3-1. 첫 번째 launch는 1초 뒤에 Task d를 출력한다.
    3-2. 두 번째 launch는 0.5초 뒤에 Task e를 출력한다.
4. Task f는 두 개의 launch가 시작된 직후 실행된다. launch는 비동기적으로 실행되기 때문에 바로 진행된다.
5. Task g는 runBlocking 블록이 종료된 후, 메인 스레드에서 실행된다.

3. 주의점

runBlocking은 주로 코드 테스트나 디버깅 상황에서 많이 쓰인다. 동기 코드 안에서 간단하게 코루틴 코드를 실행할 수 있는 장점이 있다.

하지만 메인 스레드를 차단하기 때문에 성능 저하가 발생할 수 있기 때문에 실무에서 사용할 때는 신중해야 한다.

'개념 저장소 > coroutine' 카테고리의 다른 글

구조화된 동시성  (2) 2024.12.21
Coroutine Context  (1) 2024.12.12
Deferred, async/await, withContext  (0) 2024.12.09
Job과 코루틴 제어  (0) 2024.12.08
Dispatcher  (2) 2024.12.07
'개념 저장소/coroutine' 카테고리의 다른 글
  • Coroutine Context
  • Deferred, async/await, withContext
  • Job과 코루틴 제어
  • Dispatcher
jamin
jamin
  • jamin
    jamin
    jamin
  • 전체
    오늘
    어제
    • 전체 (83)
      • 트러블슈팅 (31)
      • 개념 저장소 (19)
        • coroutine (10)
        • spring reactive (9)
        • network (0)
      • 코딩 테스트 (32)
  • 태그

    백준 23758
    spring reactive
    백준
    다이나믹 프로그래밍
    분리집합
    cluster mode
    instancio
    코딩테스트
    대용량 데이터
    JPA
    정렬
    경로압축
    log
    그리디 알고리즘
    error alram
    sinks
    dfs
    다익스트라
    DP
    그리디
    coroutine
    누적합
    mirroring mode
    reactive
    spring boot
    Kotlin
    코테
    수학
    BFS
    batch
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jamin
runBlocking
상단으로

티스토리툴바