본문 바로가기
자바와 코틀린

코루틴 - CoroutineDispatcher

by pius712 2024. 9. 17.

CoroutineDispatcher란?

코루틴은 근본적으로 스레드에 의해서 실행된다.

그렇다면, 코루틴이 어떤 스레드에 의해서 실행되는지 결정하는 것은 무엇일까?

이것을 결정하는 것이 바로 CoroutineDispatcher 이다.

CoroutineDispatcher 는 Coroutine 이라는 작업 단위가 어떻게 실행될지 제어하는 객체이다.

물론 CoroutineDispatcher 마다 내부 구현은 캡슐화 되어있기에 구현체마다 사용하는 기술이 다를 수 있으나,

아래의 메서드를 통해 생성되는 CoroutineDispatcher 는 내부적으로 Executor 프레임워크의 ThreadPoolExecutor 를 사용하고 있다.

  • *newFixedThreadPoolContext*()
  • *newSingleThreadContext*()

CoroutineDispatcher 의 구현체

일반적으로 CoroutineDispatcher 는 직접 생성하기보다는 미리 정의된 구현체를 사용하는 것이 권고된다.

대표적으로 아래의 것들이 미리 정의된 구현체이다.

  • Dispatchers.IO : 네트워크나 file I/O 작업과 같은 IO 작업에 특화
  • Dispatchers.Default : CPU intensive 한 작업에 특화
  • Dispatchers.Main :

왜 미리 정의된 구현체를 사용하는 것이 권고될까?

그것은 바로 개별적으로 CoroutineDispatcher 를 정의하는 경우, 스레드가 비효율적으로 생성되거나 관리될 수 있기 때문이다. 스레드를 제대로 관리하지 않는 경우, CPU 와 메모리가 스레드의 생성과 실행 등으로 리소스를 낭비할 가능성이 커진다.

반면, 미리 정의된 구현체들은 싱글톤으로 구현이 되어있다.

이 구현체들은 공용 스레드 풀을 사용하여, 한정된 리소스를 사용하여 관리된다.