[학습정리] Coroutine

김정현·2024년 7월 29일

코루틴(Coroutine) 이란?

코루틴은 Co + Routine이 합쳐진 단어로써 서로 협력하여 실행되는 루틴을 말한다.

실행의 지연과 재개를 허용함으로써, 비선점적 멀티태스킹을 위한 서브 루틴을 일반화한 컴퓨터 프로그램 구성요소

여기서 말하는 비선점적 멀티태스킹서브 루틴은 무엇을 의미하는지 알아보자

비선점적 멀티 태스킹

  • 비선점형: 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없다

  • 선점형: 하나의 프로세스가 다른 프로세스 대신에 CPU를 차지할 수 있다.

    코루틴은 비선점적 멀티 태스킹이기 때문에 병행성은 제공하나 병렬성은 제공하지 않는다.

하나의 스레드 A가 CPU를 점유하고 있을 때 코루틴은 스레드 A 내부에서 서로 번갈아가면서 실행된다. 하지만 B 스레드는 A스레드가 CPU를 점유하고 있을 때 CPU를 차지할 수 없다.
-> 병렬성을 제공하는 이유는 하나의 스레드 내부에서 실행되기 때문이다. 여러 코루틴이 동시에 실행되는 것처럼 보이지만, 실제로는 하나의 스레드 내부에서 진행 되기 때문에 병렬성은 제공되지 않는다.

서브루틴

  • 일반적으로 main함수에 의해서 수행되는 흐름을 메인 루틴이라고 한다 반면에 main함수 내부에서 실행되는 개별 함수들에 의해 수행되는 흐름을 서브루틴이라고 한다.
fun main() {
    // 메인 루틴
    println("Main routine started")

    // 서브 루틴 호출
    val result = add(3, 5)
}

// 서브 루틴: 두 수를 더하는 함수
fun add(a: Int, b: Int): Int {
    return a + b
}

서브 루틴의 경우에는 시작하는 지점끝나는 지점이 명확하게 존재하고 있다. 메인 루틴에서 서브 루틴 함수를 호출하면 시작하고 return을 만나면 함수가 종료된다

코루틴도 서브루틴과 비슷하지만 다른점이 있다.

서브 루틴단일 진입 지점에서 시작 후 단일 반환 지점에서 종료되는 반면에 코루틴의 경우는 진입 후 반환문이 없더라도 임의의 지점에서 실행 중 동작을 중단하고 이후 해당 지점에서부터 실행을 재개한다.

profile
안녕하세요 반갑습니다

0개의 댓글