티스토리 뷰

CoroutineContext

CoroutineContext는 Coroutine이 어떠한 환경(Thread)에서 실행될지 결정하는 중요한 매개체입니다. CoroutineScope를 만들거나 CoroutineBuilder로 새로운 Coroutine을 만들 때 주로 쓰입니다. 즉 Coroutine Context를 통해 어떠한 Thread로 Dispatch될지 결정합니다.


 

Thread Pool

직접 Thread Pool을 만들고 해당 Thread Pool에서 작동하는 Dispatcher를 만들 수 있습니다. (Dispatcher는 CoroutineContext를 상속받습니다.)

val dispatcher = newFixedThreadPoolContext(10, "New Fixed Thread")
CoroutineScope(dispatcher).launch { 
    ...
}

val dispatcher = newSingleThreadContext("New Single Thread")
CoroutineScope(dispatcher).launch {
    ...
}

 

Dispatchers

기본적으로 Dispathcers라는 object에 Default, Main, IO, Unconfined가 정의되어 있으며 해당 Dispathcer는 Thread Pool을 가지고 있습니다.

  • Default : 기본적으로 CPU 자원을 많이 소비하는 작업에 최적화된 Dispatcher
  • Main : Android Main Thread에서 Coroutine이 실행되도록 도와주는 Dispatcher ANR을 막기 위해 UI 관련된 필요한 작업만 진행하는 것이 좋다.
  • IO : Disk, Network 등 IO 작업에 최적화된 Dispatcher
  • Unconfined : 현재 Thread에 맞게 실행되는 신기한 Dispatcher, 실행 당시 Thread에서 실행되다가 suspend후 resume될 때 Thread에서 이어서 작업을 진행한다.

 

EmptyCoroutineContext

종종 Coroutine 내부 코드를 보면 볼 수 있는 Context이다. Empty 즉 아무것도 없는 상태를 뜻한다. (Coroutine 내부 구조에서 Context가 존재하지 않으면 Dispatchers.Deafult로 진행한다.)

'Android > Coroutine' 카테고리의 다른 글

Android Coroutine - Job Lifecycle  (0) 2022.01.15
Android Coroutine - Cancel  (0) 2022.01.08
Android Coroutine - Coroutine Builder  (0) 2022.01.07
Android Coroutine - Scope  (0) 2022.01.07
Android Coroutine - 개념  (0) 2022.01.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함