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

suspend fun

suspend함수는 시작하고, 멈추고, 다시 시작할 수 있는 함수이다. 다른 suspend fun, 메인 스레드 혹은 코루틴 빌더에서만 호출해서 사용할 수 있다. suspend function 을 사용한다면 스레드가 blocked 된 상태에 놓일 때, 그 작업을 중단 하고 그 기간 동안스레드에서 다른 작업을 수행할 수가 있다.

Kotlin Corountine

기존방식

기존의 비동기 방식들의 한계는 작업의 단위가 스레드였음. 작업단위가 스레드일 경우 스레드의 생성과 작업을 변환하는 비용이 비쌈. 또한 한 스레드가 다른 스레드부터의 작업을 기다려야 하면, 기본적으로 다 른 스레드의 작업을 기다리는 스레드는 다른 작업이 스레드를 사용할 수 없도록 Blocking 된다. 이렇게 되면 해당 스레드는 하는 작업 없 이 다른 작업이 끝마쳐질 때까지 기다려야 하기 때문에 자원은 낭비된다.

작업1을 실행 하려면 작업2의 결과가 필요한 경우

작업1을 실행 하려면 작업2의 결과가 필요한 경우

Coroutine은?

코루틴은 스레드 안에서 실행되는 일시 중단 가능한 작업의 단위이다. 하나의 스레드에서 여러 코루틴이 서로 스레드를 양보해가며 실행될 수 있다. 스레드의 사용 권한을 양보할 수 있기 때문에 Blocking 상황을 최소화 하여 스레드를 최대한 활용할 수 있다.

기존방식을 코루틴으로 변경한 경우
작업2의 결과를 기다릴동안 스레드1을 양보하여 다른 작업에 할당 가능

기존방식을 코루틴으로 변경한 경우 작업2의 결과를 기다릴동안 스레드1을 양보하여 다른 작업에 할당 가능

비교 코루틴을 사용하기 좋을 때