Programming Language/Kotlin

[Kotlin] Dispatchers in Kotlin Coroutines

Tenacity_Dev 2024. 3. 2. 20:50
728x90

코루틴에서 사용할 수 있는 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

 

Dispatchers in Kotlin Coroutines

In this blog, we are going to learn about the Dispatchers in Kotlin Coroutines including the types of Dispatchers available for use in Coroutines.

amitshekhar.me

 

728x90