Coroutines/Coroutine Basics

[Coroutine 부록] 2. 사용자 정의 ThreadPool을 사용하는 커스텀 디스패처 만들기

Dev.Cho 2021. 8. 21. 23:02
반응형

사실상 안드로이드 개발을 하면서는 Thread 혹은 Thread Pool을 만들 일이 거의 없다. 이미 만들어진 Dispatcher을 사용하는 것만으로 충분하기 때문이다. 하지만, 종종 커스텀 디스패처를 만들어야 할 필요하가 있다. 이에 부록으로 이 글을 쓰게 되었다.

 

커스텀 디스패처를 만드는 두가지 방법

코루틴에서는 아래 두가지 메서드로 커스텀 디스패처를 만들 수 있다.

  • newSingleThreadContext(name: String) : Single Thread를 만드는 메서드
  • newFixedThreadPoolContext(nThreads: Int, name: String) : Thread Pool을 만드는 메서드

 

newSingleThreadContext로 단일 스레드를 사용하는 커스텀 디스패처 만들기

이 메서드를 이용하면 코루틴을 실행할 수 있는 Single Thread Dispatcher가 만들어진다.

val singleThreadDispatcher = newSingleThreadContext("Single Thread ThreadPool")

 

위에서 만들어진 Dispatcher은 아래와 같이 활용될 수 있다. method() 부분에 필요한 작업을 넣으면 된다.

launch(singleThreadDispatcher) {
    method()
}

 

newFixedThreadPoolContext로 멀티 스레드를 사용하는 커스텀 디스패처 만들기

이 메서드를 이용하면 코루틴을 실행할 수 있는 Thread Pool Dispatcher가 만들어진다. 첫 째 인자는 Thread Pool을 구성할 스레드의 개수이며, 둘 째 인자는 Thread Pool의 이름이다.

val dispatcherWith2Threads = newFixedThreadPoolContext(2,"ThreadPool with 2 threads")

위 코드에서는 2개의 스레드로 구성된 Thread Pool을 만들어 Dispatcher로 활용한다.

이 Dispatcher은 아래와 같이 활용될 수 있다. method() 부분에 필요한 작업을 넣으면 된다.

launch(dispatcherWith2Threads) {
    method()
}

 

반응형