KOTLIN · 성능
스레드 풀 최적화
코루틴 디스패처와 스레드 풀 설정을 최적화합니다. CPU 바운드와 I/O 바운드 작업의 구분이 핵심입니다.
성능고급thread-pooldispatcherslimitedParallelismconcurrency
핵심 설명
코루틴 디스패처와 스레드 풀 설정을 최적화합니다. CPU 바운드와 I/O 바운드 작업의 구분이 핵심입니다.
Kotlin code
import kotlinx.coroutines.*
import java.util.concurrent.Executors
import kotlin.system.measureTimeMillis
fun main() = runBlocking {
// CPU 바운드: Dispatchers.Default (코어 수 만큼)
println("Default 스레드: ${Runtime.getRuntime().availableProcessors()}")
// I/O 바운드: Dispatchers.IO (최대 64 스레드)
val ioTime = measureTimeMillis {
val jobs = List(100) {
async(Dispatchers.IO) {
Thread.sleep(100) // I/O 시뮬레이션
"결과-$it"
}
}
jobs.awaitAll()
}
println("IO 100개 병렬: ${ioTime}ms")
// 커스텀 디스패처
val customPool = Executors.newFixedThreadPool(4).asCoroutineDispatcher()
val customTime = measureTimeMillis {
val jobs = List(20) {
async(customPool) {
Thread.sleep(50)
it
}
}
jobs.awaitAll()
}
println("커스텀(4스레드) 20개: ${customTime}ms")
customPool.close()
// limitedParallelism: 기존 디스패처에서 동시성 제한
val limited = Dispatchers.IO.limitedParallelism(2)
val limitedTime = measureTimeMillis {
val jobs = List(10) {
async(limited) {
Thread.sleep(100)
it
}
}
jobs.awaitAll()
}
println("제한(2스레드) 10개: ${limitedTime}ms")
}학습 팁
Dispatchers.IO.limitedParallelism(n)은 전체 IO 풀과 스레드를 공유하면서 동시 실행 수만 제한합니다. DB 연결 풀 크기에 맞출 때 유용합니다.
주의할 점
CPU 바운드 작업에 Dispatchers.IO를 사용하면 스레드가 과다 생성되어 컨텍스트 스위칭 오버헤드가 발생합니다. CPU 작업에는 Default를 사용하세요.
자주 묻는 질문
스레드 풀 최적화란 무엇인가요?
코루틴 디스패처와 스레드 풀 설정을 최적화합니다. CPU 바운드와 I/O 바운드 작업의 구분이 핵심입니다.
스레드 풀 최적화 학습 시 주의할 점은 무엇인가요?
CPU 바운드 작업에 Dispatchers.IO 를 사용하면 스레드가 과다 생성되어 컨텍스트 스위칭 오버헤드가 발생합니다. CPU 작업에는 Default 를 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.