코틀린에서는 스레드와 스레드 풀을 쉽게 만들 수 있지만 직접 엑세스하거나
제어하지 않는다. CoroutineDispatcher는 기본적으로 가용성, 부하, 설정을 기반으로
스레드 간에 코루틴을 분산하는 역할을 한다.
코루틴을 시작하거나 재개할 스레드를 결정하기 위해 코루틴은 디스패처가 사용된다.
모든 코루틴 디스패처는 CoroutineDispatcher 인터페이스를 구현해야한다.
디스패처와 함께 필요에 따라 풀(pool) 또는 스레드를 정의하는 데 사용할 수 있는 몇가지 빌더가 있다.
- newSingleThreadContext() : 단일 스레드로 디스패처를 생성한다. 여기에서 실행되는 코루틴은 항상 같은 스레드에서 시작되고 재개된다.
- newFixedThreadPoolContext() : 지정된 크기의 스레드 풀이 있는 디스패처를 만든다. 런타임은 디스패처에서 실행된 코루틴을 시작하고 재개할 스레드를 결정한다.
안드로이드의 UI 코루틴 디스패처 사용
GlobalScope.launch(Dispatcher.Main) {
// ..
}
UI 스레드(메인 스레드)에서의 작업 가능
CoroutineBuilder
일시 중단 람다를 받아 그것을 실행시키는 코루틴을 생성하는 함수. 코루틴은 다음과 같은 다양한 일반적인
시나리오에 맞게 활용할 수 있는 코루틴 빌더를 많이 제공한다.
- async() : 결과가 예상되는 코루틴을 시작하는 데 사용된다. 코루틴 내부에서 일어나는 모든 예외를 캡처해서 결과에 넣기 때문에 조심해서 사용해야 한다. 결과 또는 예외를 포함하는 Deffered<T>를 반환한다. 결과를 처리하기 위한 목적. Deffered<T>는 취소 불가능한 non-blocking cancellable future를 의미한다. async를 사용할 때 결과를 처리하는 것을 잊어서는 안 된다. Deffered는 결과값을 수신하는 비동기 작업. Deffered는 Job이다. 결과가 있는 비동기 작업을 수행하기 위해 결과 값이 없는 Job을 확장하는 인터페이스 Job은 코루틴의 상태를 가지고 있고, 코루틴을 컨트롤 할 수 있다.