PHpullh
학습 라이브러리/Kotlin/Kotlin Coroutine 성능 — Dispatcher 선택

KOTLIN · 성능

Kotlin Coroutine 성능 — Dispatcher 선택

올바른 Dispatcher 선택이 코루틴 성능의 핵심입니다. 작업 유형에 맞는 Dispatcher를 사용하세요.

성능고급DispatcherDefaultIOlimitedParallelism성능최적화

핵심 설명

올바른 Dispatcher 선택이 코루틴 성능의 핵심입니다. 작업 유형에 맞는 Dispatcher를 사용하세요.

Kotlin code

<span class="kw">import</span> <span class="pk">kotlinx.coroutines.*</span>
<span class="kw">import</span> <span class="pk">kotlin.system.measureTimeMillis</span>

<span class="kw">suspend fun</span> <span class="fn">cpuTask</span>(n: <span class="ty">Int</span>): <span class="ty">Long</span> =
    withContext(Dispatchers.Default) {
        (<span class="num">1</span>..<span class="num">1_000_000</span>).fold(<span class="num">0L</span>) { acc, i -> acc + i * n }
    }

<span class="kw">suspend fun</span> <span class="fn">ioTask</span>(): <span class="ty">String</span> =
    withContext(Dispatchers.IO) {
        delay(<span class="num">10</span>)  <span class="cm">// I/O 시뮬레이션</span>
        <span class="str">"IO 완료"</span>
    }

<span class="kw">fun</span> <span class="fn">main</span>() = runBlocking {
    <span class="cm">// CPU: Default (코어 수만큼 스레드)</span>
    <span class="kw">val</span> t1 = measureTimeMillis {
        (1..8).map { async { cpuTask(it) } }.awaitAll()
    }
    <span class="fn">println</span>(<span class="str">"CPU 병렬 8개: ${t1}ms"</span>)

    <span class="cm">// IO: IO (최대 64 스레드, 블로킹 IO 허용)</span>
    <span class="kw">val</span> t2 = measureTimeMillis {
        (1..20).map { async { ioTask() } }.awaitAll()
    }
    <span class="fn">println</span>(<span class="str">"IO 병렬 20개: ${t2}ms"</span>)

    <span class="cm">// limitedParallelism — 동시 실행 수 제한</span>
    <span class="kw">val</span> limited = Dispatchers.IO.limitedParallelism(<span class="num">4</span>)
    withContext(limited) { ioTask() }
}

학습 팁

CPU 바운드 → Dispatchers.Default, I/O 바운드 → Dispatchers.IO, UI → Dispatchers.Main. limitedParallelism()으로 외부 API 요청 수를 제한하세요.

주의할 점

I/O 작업을 Dispatchers.Default에서 실행하면 CPU 코어를 I/O 대기로 낭비합니다. 반대로 CPU 작업을 Dispatchers.IO에서 실행하면 스레드 수가 너무 많아집니다.

자주 묻는 질문

Kotlin Coroutine 성능 — Dispatcher 선택란 무엇인가요?

올바른 Dispatcher 선택이 코루틴 성능의 핵심입니다. 작업 유형에 맞는 Dispatcher를 사용하세요.

Kotlin Coroutine 성능 — Dispatcher 선택 학습 시 주의할 점은 무엇인가요?

I/O 작업을 Dispatchers.Default 에서 실행하면 CPU 코어를 I/O 대기로 낭비합니다. 반대로 CPU 작업을 Dispatchers.IO 에서 실행하면 스레드 수가 너무 많아집니다.