코루틴에서 사용할 수 있는 Dispatcher 유형을 포함하여 Kotlin 코루틴의 Dispatcher 에 대해 알아보자.
Dispatchers 이란
Dispatchers는 코루틴이 작업을 수행해야 하는 스레드를 결정하는 데 도움을 준다. 우리는 특정 작업을 효율적으로 수행하기 위해 코루틴을 사용한다. 코루틴은 특정 스레드에서 작업을 실행한다. 여기가 Dispatcher가 등장하는 곳이다. 코루틴은 작업을 수행해야 하는 스레드를 결정할 때 Dispatcher의 도움을 받는다.
Kotlin 코루틴에는 4가지 유형의 Dispatcher가 있다.
- Dispatchers.Default
- Dispatchers.IO
- Dispatchers.Main
- Dispatchers.Unconfined
Dispatchers.Default
CPU 직얍적인 작업을 수행하려면 Dispatchers.Default를 사용해야 한다.
사용 사례 예시 :
- 행렬 곱셈과 같은 무거운 계산을 수행
- 정렬, 필터링, 검색 등과 같이 메모리에 있는 더 큰 목록에 대한 작업을 수행
- 디스크에 있는 이미지 파일을 읽는 것이 아니라 메모리에 있는 비트맵에 필터를 적용
- 디스크에 있는 JSON 파일을 읽는 것이 아니라 메모리에서 사용 가능한 JSON을 구문 분석
- 디스크에 있는 이미지 파일을 읽는 것이 아니라 메모리에 이미 있는 비트맵의 크기를 조정
- 디스크에 있는 이미지 파일을 읽는 것이 아니라 메모리에 이미 있는 비트맵에 대한 모든 작업
launch(Dispatchers.Default) {
// Your CPU-intensive task
}
Dispatchers.IO
디스크 또는 네트워크 I/O관련 작업을 사용하는 데 Dispatchers.IO를 사용해야 한다.
사용 사례 예시 :
- 네트워크 호출과 같은 모든 네트워크 작업.
- 서버에서 파일을 다운로드
- 디스크의 한 위치에서 다른 위치로 파일을 이동
- 파일에서 읽기.
- 데이터베이스 쿼리를 작성
- 공유 기본 설정을 로드하는 중
쉽게 말하자면, 파일 시스템이나 네트워킹과 관련된 모든 작업은 IO 관련 작업이므로 Dispatchers.IO를 사용해야한다.
launch(Dispatchers.IO) {
// Your IO related task
}
Dispatchers.Main
Android의 메인 스레드에서 코루틴을 실행하는데 사용해야 한다. Dispatchers.Main은 주로 UI와 상호작용하고 작은 작업을 수행하는 곳이다.
사용 사례 예시:
- UI 관련 작업을 수행합니다.
- 정렬, 필터링, 검색 등과 같이 메모리에 존재하는 더 작은 목록의 작업과 같은 작은 작업입니다.
launch(Dispatchers.Main) {
// Your main thread related task
}
Dispatchers.Unconfined
공식 문서에 따르면 특정 스레드에 국한되지 않는 코루틴 디스패처이다. 현재 호출 프레임에서 코루틴의 초기 연속을 실행하고 특정 스레딩 정책을 요구하지 않고 해당 일시 중지 함수에서 사용하는 스레드에서 코루틴을 재개할 수 있다.
쉽게 말하면 Dispatchers.Unconfined는 코루틴이 실행될 위치에 관심이 없을 때 사용해야한다.
launch(Dispatchers.Unconfined) {
// Your task for which you do not care about the thread on which it should run.
}
실제로 Android 프로젝트를 할 때 나는 사용한 적이 없긴하다..
참고
https://amitshekhar.me/blog/dispatchers-in-kotlin-coroutines
'Programming Language > Kotlin' 카테고리의 다른 글
[Kotlin] lateinit, lazy 에 대해서 공부하자 (0) | 2024.05.28 |
---|---|
[Kotlin] Flow Retry 연산자 (0) | 2024.03.03 |
[Kotlin] Flow zip 연산자로 long- running tasks in parallel 처리하기 (0) | 2024.03.02 |
[Kotlin] Flow Builder를 사용하여 Flow 만들어보기 (0) | 2024.03.02 |
[Kotlin] Kotlin에서 Flow Api (0) | 2024.03.01 |