코루틴을 사용할때는 아래와 같이 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
'프로그래밍 > Kotlin' 카테고리의 다른 글
[kotlin] Object 사용법 (0) | 2022.07.25 |
---|---|
[Kotlin] Naver API를 이용해 책 검색 코드 (0) | 2022.07.20 |
[Android] 버튼 클릭시 특정 링크로 이동 (0) | 2022.06.30 |
[Kotlin] EditText 코드로 열기 (XML사용 X) (0) | 2022.04.20 |
[Kotlin] 모델로 가져온 Spinner값 표시 (0) | 2022.03.21 |
댓글