[kotlin] Dispatchers와 스레드풀 개념 이해하기
안녕하세요! 이번에는 Kotlin의 Dispatchers
와 스레드풀(Thread Pool)에 대해 알아보겠습니다.
Dispatchers
Kotlin에서 Dispatchers
는 코루틴을 실행할 때 어디서 실행할 지를 결정하는 요소입니다. 기본적으로 세 가지의 Dispatchers
가 제공됩니다.
Dispatchers.Main
: 안드로이드의 UI 스레드에서 작업을 처리할 때 사용합니다.Dispatchers.IO
: I/O 바운드 작업을 처리할 때 사용합니다. 파일 읽기/쓰기, 네트워크 작업 등이 해당됩니다.Dispatchers.Default
: CPU 바운드 작업을 수행할 때 사용합니다. 병렬 계산, 데이터 처리 등이 해당됩니다.
import kotlinx.coroutines.*
fun main() {
GlobalScope.launch(Dispatchers.Main) {
// UI 스레드에서 동작하는 코드
}
GlobalScope.launch(Dispatchers.IO) {
// I/O 작업을 처리하는 코드
}
GlobalScope.launch(Dispatchers.Default) {
// CPU 바운드 작업을 처리하는 코드
}
}
스레드풀(Thread Pool)
스레드풀은 다수의 스레드를 관리하고 재사용하면서 작업을 처리하기 위한 것입니다. 스레드 생성과 제거는 시스템 자원을 많이 사용하므로, 스레드풀을 이용하여 성능 상의 이점을 얻을 수 있습니다.
스레드풀은 일반적으로 “코어 스레드 수”, “최대 스레드 수”, “대기 큐” 등의 파라미터를 가지고 있습니다.
import java.util.concurrent.*
fun main() {
val corePoolSize = 10
val maxPoolSize = 20
val keepAliveTime = 5000 // milliseconds
val workQueue = LinkedBlockingQueue<Runnable>()
val threadPool = ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, workQueue)
threadPool.execute {
// 스레드풀에서 실행되는 코드
}
}
ThreadPoolExecutor
의 매개변수들은 다음과 같습니다.
corePoolSize
: 최소 스레드 수maxPoolSize
: 최대 스레드 수keepAliveTime
: 유휴 상태로 있는 스레드를 제거하기까지의 대기 시간workQueue
: 대기 큐
요약
Dispatchers
는 Kotlin의 코루틴을 특정 스레드로 디스패치하기 위한 것이며, 스레드풀은 다수의 스레드를 효율적으로 관리하면서 작업을 처리하기 위한 것입니다.
이렇게 Kotlin에서는 Dispatchers
를 통해 코루틴을 스레드에 연결시키고, 스레드풀을 통해 다수의 스레드를 관리하여 효과적으로 작업을 처리할 수 있습니다.
더 자세한 내용은 Kotlin 공식 문서를 참고하세요.