Hello, Android!
코루틴의 문맥 본문
코루틴은 항상 특정 문맥에서 실행되며, 문맥은 CoroutineContext에 의해 정의되며
어떤 컨텍스트에서 실행이 되는지는 디스패처(Dispatcher)가 결정한다
코루틴은 CoroutineContext로 구현된 형식의 문맥을 가진다
CoroutineDispatcher는 추상 클래스로써 몇가지 디스패처 객체를 정의하고 있다
1. 기본 문맥
Dispatcher.Default(GlobalScope)는 기본 문맥인 CommonPool에서 실행이 되며 GlobalScope로 표현한다
즉 launch(Dispatcher.Default){} 와 GlobalScope.launch{} 는 같은 표현이다
기본 문맥은 CommonPool에서 코루틴을 실행하도록 한다
즉 새로운 스레드를 생성하지 않고 기존에 있는 스레드를 활용하며, 연산 중심의 코드에 유용하다
2. IO 문맥
Dispatcher.IO는 입출력에 적합한 공유 풀로써 블로킹 동작이 많은 파일, 소켓IO 처리에 유용하다
3. Unconfined 문맥
Dispatchers.Unconfined는 호출자 스레드에서 코루틴을 시작하지만, 첫번째 중단점을 만날때 까지만 실행된다
중단점 이후에 재개할때는 서스팬드 함수가 실행된 스레드에서 수행된다
즉 예측이 힘든 상태로 수행되기 때문에 권장하지 않는다
4. 새 스레드를 생성하는 문맥
newSingleThreadContext은 새 스레드를 만들기때문에 비용이 많이 들고 필요하지 않으면 해제하거나 종료하여야 한다
코루틴 안에 코루틴을 정의하면 자식 코루틴이 되며, 부모 코루틴이 취소되면 자식 코루틴도 취소된다
'Kotlin' 카테고리의 다른 글
채널 (0) | 2020.09.21 |
---|---|
코루틴의 동작 제어 (0) | 2020.09.13 |
runBlocking (0) | 2020.09.06 |
코루틴 launch, async (0) | 2020.09.05 |
스레드 (0) | 2020.08.29 |