https://kotlinlang.org/docs/reference/coroutines/coroutines-guide.html
Coroutines Guide - Kotlin Programming Language
kotlinlang.org
코루틴은 동시 실행 설계 패턴이다.
코틀린 1.3에 추가 되었음.
- 기본 스레드를 차단하여 앱이 정지될 수 있는 장기 실행 작업을 관리합니다.
- 기본 스레드에서 네트워크 또는 디스크 작업을 안전하게 호출하는 기능을 제공
Coroutine : cooperative routine
kotlinx.coroutines.*
비동기 스레드 처리
스레드가 특정 "정지 지점"에서 코루틴 실행을 중지하고 다른 작업을 수행 할 수 있다는 것이다. 나중에 코루틴을 다시 시작하거나 다른 스레드가 처리할 수 있다.
하나의 작업이 아니라 오히려 하위 작업이다.
코루틴은 스레드와 비슷하지만 스레드와는 다르다. 코루틴은 가벼운 스레드이다 즉 스레드를 새로 생성하면서 CPU 자원을 사용하지만 코루틴은 호출된 스레드에서 주로 사용되어 JVM HEap memory에서만 object로 존재한다. 코루틴은은 특정 스레드에서실행되기 때문에 concurrency하게 동작하면서 parallerl하게 동작하듯이 보일 수 있다.
1000개의 스레드를 만들 때 보다 1000개의 코루틴 인스턴스를 만드는 것이 훨씬 저렴하다.
suspending functions
- CoroutineScope (GlobalScope)
- 코루틴의 범위 블록의 묶음으로 제어할 수 있는 단위
- GlobalScope는 CoroutineScope의 한 종류, 프로그램 전반에 걸쳐 백그라운드에서 동작
- CoroutineContext
- Coroutine 처리에 대한 여러가지 정보의 집합 (Job, dispatcher 가 있다.)
- Dispatcher
- 어떤 스레드를 이용해서 어떻게 동작할것인지 미리 정의
- 주요 Dispatcher
- Dispatchers.Default : CPU 사용량이 많은 작업에 적합, 주 스레드에서 작업하기에는 너무 긴 작업
- Dispatchers.IO : 네트웍, 디스크 작업에 최적화
- Dispatchers.Main : UI 스레드(안드로이드)
- Dispatchers.Unconfined
- launch (async)
코루틴의 시작
2가지 방법으로 시작할 수 있다.
- launch
- 새 코루틴을 시작하고 호출자에게 결과를 반환하지 않는다. 실행 후 망각(fire and forget)으로 간주되는 몯ㄴ 작업은 launch를 사용하여 시작할 수 있다.
- async
- 새 코루틴을 시작하고 await 정지 함수를 사용하여 result를 반활할 수 있다.
코루틴 종류
Dispatchers - kotlinx-coroutines-core
Dispatchers Groups various implementations of CoroutineDispatcher. Properties Default The default CoroutineDispatcher that is used by all standard builders like launch, async, etc if neither a dispatcher nor any other ContinuationInterceptor is specified i
kotlin.github.io
'IT개발 > Kotlin' 카테고리의 다른 글
Kotlin design pattern (0) | 2020.01.13 |
---|---|
Kotlin의 null 처리 (0) | 2020.01.09 |
Kotlin 유용한 함수 (0) | 2019.12.19 |
댓글