본문 바로가기
프로그래밍/Kotlin

[Kotlin] 코루틴 디스패처

by Youngs_ 2022. 7. 5.

코루틴을 사용할때는 아래와 같이 CoroutineScope(디스패처).launch와 같은 형식으로 사용하는데 각 디스패처별 설명은 하단과 같다.

CoroutineScope(Dispatchers.Default).launch {
                // TODO()
}
  • Dispatchers.Default : CPU 사용량이 많은 작업에 사용합니다. 주 스레드에서 작업하기에는 너무 긴 작업 들에게 알맞음
  • Dispatchers.IO : 네트워크, 디스크 사용 할때 사용합니다. 파일 읽고, 쓰고, 소켓을 읽고, 쓰고 작업을 멈추는것에 최적화
  • Dispatchers.Main : 안드로이드의 경우 UI 스레드를 사용

* Dispatcher.Default

- launch, async와 같은 기본적인 builder들의 default dispatcher입니다.

- default로 CPU core 개수만큼 동시에 돌릴 수 있으며, 최소 두개로 돕니다.

- Main Thread가 아닌 Thread에서 CPU 작업을 하기 위해 만들어졌습니다. 

- 리스트를 정렬하고 Json을 parsing할 때 사용할 수 있습니다.

 

* Dispatcher.Main

- UI 작업을 위한 Main Thread로 이동시키는 Coroutine Dispatcher입니다. 위에서도 말씀드렸지만, Dispatcher.Main은 Main Thread가 아닙니다. 안드로이드 공식문서에서도 Dispatchers.Main으로 하여금 coroutine이 main thread에서 돌 수 있도록 하라고 제시하고 있습니다. (Use this dispatcher to run a coroutine on the main Android thread. 링크)

 

* Dispatcher.Unconfined

- 특정 Thread로 넣어야할 지 정해지지 않은 Coroutine Dispatcher입니다. 

- Dispatcher.Unconfined는 호출 Thread에서 코루틴을 시작합니다.

- 다시 suspend 함수가 실행(resume)될 때, 다시 suspend 함수를 실행한 Thread에서 수행됩니다. 

- Unconfined Dispatcher는 coroutine이 cpu 시간을 소모하지 않거나 UI를 업데이트하지 않는 경우처럼 특정 Thread에 국한된 작업이 아닌 경우 적절합니다.

 

* Dispatcher.IO

- 파일 읽기, 파일 쓰기, 소켓 읽기와 같이 blocking IO를 할 때 이 IO Dispatcher를 활용합니다.

- Thread의 개수가 늘어날 수도 있고, 필요에 따라서는 종료되고 줄어들 수 있습니다.

- System 영역의 "kotlinx.coroutines.io.parallelism"에 명시된 Thread의 개수만큼 늘어날 수 있습니다. Default로는 64개의 Thread까지 생성이 가능합니다. System에 명시된 Thread보다 더 필요하다면 custom하게 만들어 사용하면 됩니다.

- IO Dispatcher는 Default Dispatcher와 Thread를 공유합니다

 


출처 : https://wonnyhouse.tistory.com/271

 

비동기 1편 - Android에서 Dispatcher란?

안드로이드에는 아래와 같이 네 개의 Dispatcher가 있습니다. - Default - Main - Unconfined - IO 그런데 Dispatcher가 뭘까요? 안드로이드 공식문서에서는 다음과 같이 Dispatcher에 대해 소개하고 있습니다. K..

wonnyhouse.tistory.com

 

댓글