티스토리 뷰

Kotlin

coroutine(코루틴)이란

파미페럿 2024. 3. 3. 21:00

요즘 자바가 아닌 코틀린으로 작업을 하고 있다.

코틀린에서 제공하는 코루틴의 경우도 비동기 로직에 사용을 해보긴 해봤지만 잘 모르고 써 문제가 생겨 코루틴에 대해 공부하며 좀 정리를 해보려 한다.

 

 

coroutine(코루틴)이란?

co + routine을 합친 단어로 함꼐 작업되는 일, 작업 등을 의미한다.

코틀린에서 제공되는 것으로 코루틴을 사용하면 비동기 로직을 깔끔하게 짤 수 있다.

비동기 로직을 짜는데 대표적으로 WebFlux(웹플럭스)가 있는데 웹플럭스와 코루틴을 사용해봤을 때 코루틴이 확실히 코드가 깔끔하고 작성한 것을 이해하기 쉬웠다. 코루틴의 경우 평소에 코딩하는대로 순차적 코딩을 하면 되서 좀 더 보기 좋았던 것 같다.

 

코루틴은 비선점형 멀티태스킹으로 프로세스가 cpu를 할당 받으면 다른 프로세스가 cpu를 할당 받을 수 없는 것을 의미한다.

즉, 테스크 1, 2, 3이 있을 때 1이 cpu를 할당 받아서 일하고 있으면 2가 cpu를 할당 받을 수 없고 1이 끝날 때까지 기다려야 하는 것이다. 이는 cpu 스케줄링 방법 중 하나로 다른 것으로는 선점형 스케줄링이 있다.

 

* 비선점형: 프로세스가 cpu를 할당받으면 스스로 반납하기 전까지 다른 프로세스가 cpu를 할당 받을 수 없다.

* 선점형:  프로세스가 cpu를 할당 받으면 우선순위에 따라 강제로 cpu를 다른 프로세스에 할당할 수 있다.

 

이로인해 코루틴은 병렬로 처리하는 것 처럼 보이는 병행성은 제공하나 실제 물리적으로 병렬로 처리하지 않아 병렬성은 제공하지 않는다.

 

마지막으로 코루틴은 메인 쓰레드에 여러 개의 코루틴이 있을 때 각 코루틴이 동작하면서 쓰레드를 점유 했다가 다른 코루틴에 양보하는 쓰레드 점유 양보가 계속적으로 일어난다. 즉, 한 코루틴이 계속 쓰레드를 점유해서 동작하는 것이 아니라 계속 안에서 양보를 하면서 쓰레드를 효율적으로 점유해 동작을 수행하는 것이다.

이는 코루틴이 서브루틴과 다르게 진입점화 반환점이 여러 개여서 가능한 일이다. 서브루틴의 졍우 진입점과 반환점이 하나여서 해당 루틴이 끝나기 전까지 다른 루틴이 쓰레드를 점유할 수 없는데 코루틴은 이와 다른 것이다.

 

이와 같은 특징 덕분에 코루틴은 내부적으로 잔원을 좀 더 효율적으로 사용하는 것이다.

 

코루틴은 아래와 같이 CoroutineScope를 정의해서 사용할 수 있다.

    fun test() {
        runBlocking {
            println("coroutine 1")
        }

        runBlocking {
            println("coroutine 2")
        }
    }

 

 

 

 

 

반응형

'Kotlin' 카테고리의 다른 글

Kotlin scope function: let, run, with, apply, also  (1) 2024.02.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함