본문 바로가기

코루틴

[코루틴] 코루틴(Coroutine)과 서브루틴(Subroutine)

Routine (루틴)

특정한 일을 하기 위한 일련의 명령(함수)

 

Subroutine (서브루틴)

함수 내에서 실행되는 다른 함수

 

루틴과 서브루틴

fun main() = runBlocking<Unit> {
    mainRoutine()  // main의 서브루틴
}

fun mainRoutine() {
    mainSubRoutine1()  // mainRoutine의 서브루틴
    mainSubRoutine2()  // mainRoutine의 서브루틴
}

fun mainSubRoutine1() { ... }

fun mainSubRoutine2() { ... }

 

서브루틴 특징

한 번 호출되면 끝까지 실행

 

서브루틴 실행 시 스레드가 사용되어 서브루틴 종료시까지 루틴은 다른 작업 X

서브루틴

 

Coroutine (코루틴)

함께(Co) 실행되는 루틴
스레드 사용을 양보하며 함께 실행

 

fun main() = runBlocking<Unit> {
    launch {
        var i = 0
        while (i < 10) {
            i++
            println("자식 코루틴에서 작업 실행 중")
            yield() // 스레드 권한 양보
        }
    }

    var i = 0
    while (i < 10) {
        i++
        println("부모 코루틴에서 작업 실행 중")
        yield() // 스레드 권한 양보
    }
}
// 결과
부모 코루틴에서 작업 실행 중
자식 코루틴에서 작업 실행 중
부모 코루틴에서 작업 실행 중
자식 코루틴에서 작업 실행 중
...

코루틴

 

Subroutine (서브루틴)  vs  Coroutine (코루틴)

서브루틴은 한 번 실행되면 완료될 때까지 스레드 사용

코루틴은 스레드 사용 권한을 양보하며 함께 실행