- 반환값이 없는 코루틴을 실행
- 반환값이 있는 코루틴을 실행
- 현재 스레드를 블로킹하여 코루틴을 실행
- 주로 테스트나 메인 함수에서 사용
ex) 아래 예제에서 아무값이 출력되지 않는 건 실행과 동시에 바로 종료 되기 때문에 코루틴이 실행되지 못한것(기다리지 못한 것)
따라서 코루틴이 끝까지 실행되는 것을 보장하기 위해서는 일정한 범위내에서 기다려주어야 한다.
import kotlinx.coroutines.*
fun main() {
val scope = GlobalScope
scope.launch {
for(i in 1..5) {
println(i)
}
}
}
이럴 떄는 runBlocking 블럭을 만들고 launch, async를 넣어 준다
코루틴이 종료 될떄까지 메인 루틴을 잠시 대기 시켜준다
안드로이드에서는 메인 스레드에서 runBlocking을 걸어주면 일정시간 이상 응답이 없는 경우 ANR(Application Not Responding) : 응답 오류 발생 -> 강제종료됨
import kotlinx.coroutines.*
fun main() {
runBlocking {
launch {
for(i in 1..5) {
println(i)
}
}
}
}
- 코루틴이 실행될 때 컨텍스트(스레드)를 정의
- Dispatchers.Default : CPU 집약적 (백그라운드 스레드)
- Dispatchers.IO : 입출력 작업 최적화 (파일, 넨트워크)
- Dispatchers.Main : 메인 (UI) 스레드에서 실행
- 코루틴이 일시적으로 멈추는 지점을 의미
- 코루틴 컨텍스트 제공
- 디스패처, 잡을 포함하는 컨텍스트를 제공
- 코루틴 수명 관리
- 구조화된 동시성
- 모든 코루틴은 부모 Scope안에서 실행합니다.
잡(JOB)
- 코루틴의 상태와 수명을 관리
- 부모자식 관계를 가진다.