728x90
Coroutine Context는 Coroutine Dispatcher 라는 녀석을 항상 포함하는데 무엇인지 알아보겠습니다.
Dispatcher
Dispatch는 한국어로 "보내다" 입니다. Dispatcher는 무엇을 보내는 것입니다.
무엇을 보낼까요? 스레드(Thread)에 코루틴(Coroutine)을 보냅니다.
무엇을 보낼까요? 스레드(Thread)에 코루틴(Coroutine)을 보냅니다.
즉 코루틴을 만든다음에 해당 코루틴을 Dispatcher로 전송하면 Dispatcher는 자신이 관리하는 스레드풀 내의
스레드의 부하 상황에 맞춰 코루틴을 배분합니다.
Android Dispatcher
안드로이드에는 Dispatcher가 이미 생성되어 있어서 별도의 Dispatcher를 생성하거나 정의하지 않아도 됩니다.
- Dispatchers.Default
- CPU를 많이 사용하는 작업을 Main Thread가 아닌 다른 Thread에서 CPU작업을 하기 위해 만들어졌습니다.
- CPU core 개수만큼 동시에 돌릴 수 있으며, 최소 2개로 돌립니다.
- 리스트 정렬이나, JSON Parsing 작업에 최적화 되어 있습니다.
- Dispatchers.Main
- UI 작업을 위한 Main Thread로 이동시키는 코루틴 디스패처.
- UI와 상호작용하는 작업을 실행하기 위해서만 사용해야 한다. - Dispatchers.IO
- 디스크 또는 네트워크 작업같이 쓰레드를 오랫동안 블락킹 하는 I/O 작업을 실행하기 위한 디스패처.
- Dispatchers.Default 와 쓰레드를 공유하고 있다고 한다. - Dispatchers.Unconfined
- 호출한 context를 기본으로 사용하는데 중단 후 다시 실행될 때 context가 바뀌면 바뀐 context를 따라가는 특이한 Dispatcher.
간단하게 사용해보기.
fun main(): Unit = runBlocking {
launch {
println("main runBlocking : 나는 ${Thread.currentThread().name} 쓰레드에서 일하고 있어요.")
}
launch(Dispatchers.Unconfined) {
println("Unconfined : 나는 ${Thread.currentThread().name} 쓰레드에서 일하고 있어요.")
}
launch(Dispatchers.IO) {
println("IO : 나는 ${Thread.currentThread().name} 쓰레드에서 일하고 있어요.")
}
launch(Dispatchers.Default) {
println("Default : 나는 ${Thread.currentThread().name} 쓰레드에서 일하고 있어요.")
}
}
launch(안에Dispatchers.---) 넣어줬습니다. 어느 쓰레드에서 돌아갈지 정해준겁니다.
첫줄을보면 그냥 launch만 썻을경우엔 부모 dispatcher를 상속 받습니다.
즉 dispatchers.main 입니다.
Thread.currentThread().name 은 지금 자신이 있는 쓰레드의 이름을 반환해줍니다.
'Android-Kotlin > Coroutine' 카테고리의 다른 글
[Coroutine] Job 이란 ? - Kotlin (0) | 2022.06.26 |
---|---|
[Coroutine] launch란? 간단 사용법 - Kotlin (0) | 2022.06.25 |
[Coroutine] CoroutineScope란? Kotlin (0) | 2022.06.22 |