티스토리 뷰
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
링크
TAG
- 함수
- commit
- viewmodel
- DSL
- CancellationException
- 연산자
- null
- Flutter
- 보이스카우트 규칙
- Android
- ViewModelStoreOwner
- 코루틴
- ConcatAdapter
- isActive
- Flowable
- rxjava
- Coroutine
- clean code
- Kotlin
- 클린 코드
- TDD
- git
- DART
- 클린코드
- Widget
- ViewModelProvider
- Exception
- gradle
- observable
- ConcatAdapter.Config
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함