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 와 메모리가 스레드의 생성과 실행 등으로 리소스를 낭비할 가능성이 커진다.
반면, 미리 정의된 구현체들은 싱글톤으로 구현이 되어있다.
이 구현체들은 공용 스레드 풀을 사용하여, 한정된 리소스를 사용하여 관리된다.
'자바와 코틀린' 카테고리의 다른 글
코루틴 - 중단함수 (0) | 2024.09.17 |
---|---|
코루틴 - 구조화된 동시성 (2) | 2024.09.17 |
코루틴 - 코루틴 빌더와 Job (0) | 2024.09.17 |
프로세스와 스레드(운영체제 기본) (0) | 2024.07.29 |
companion object 는 클래스이자 객체다. (0) | 2023.10.09 |