PHpullh
학습 라이브러리/Kotlin/코루틴 성능 최적화

KOTLIN · 성능

코루틴 성능 최적화

코루틴의 성능을 최적화하는 기법입니다. 불필요한 중단 방지, 적절한 디스패처 선택, 배치 처리를 다룹니다.

성능중급coroutine-performanceparallelbufferbatch

핵심 설명

코루틴의 성능을 최적화하는 기법입니다. 불필요한 중단 방지, 적절한 디스패처 선택, 배치 처리를 다룹니다.

Kotlin code

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
import kotlin.system.measureTimeMillis

suspend fun fetchItem(id: Int): String {
    delay(100) // 네트워크 지연 시뮬레이션
    return "item-$id"
}

fun main() = runBlocking {
    // 나쁜 예: 순차 실행
    val seqTime = measureTimeMillis {
        val results = (1..10).map { fetchItem(it) }
    }
    println("순차: ${seqTime}ms")

    // 좋은 예: 병렬 실행
    val parTime = measureTimeMillis {
        val results = coroutineScope {
            (1..10).map { async { fetchItem(it) } }.awaitAll()
        }
    }
    println("병렬: ${parTime}ms")

    // Flow 배치 처리
    val batchTime = measureTimeMillis {
        (1..100).asFlow()
            .buffer(10) // 버퍼링
            .map { fetchItem(it) }
            .collect {}
    }
    println("Flow 버퍼: ${batchTime}ms")

    // 최적: chunked + 병렬
    val optTime = measureTimeMillis {
        (1..100).chunked(10).map { batch ->
            coroutineScope {
                batch.map { async { fetchItem(it) } }.awaitAll()
            }
        }
    }
    println("청크 병렬: ${optTime}ms")
}

학습 팁

flow.buffer()를 사용하면 방출과 수집이 별도 코루틴에서 실행되어 파이프라인 병렬성이 향상됩니다.

주의할 점

무제한 병렬 요청은 서버에 과부하를 줄 수 있습니다. SemaphorelimitedParallelism으로 동시 요청 수를 제한하세요.

자주 묻는 질문

코루틴 성능 최적화란 무엇인가요?

코루틴의 성능을 최적화하는 기법입니다. 불필요한 중단 방지, 적절한 디스패처 선택, 배치 처리를 다룹니다.

코루틴 성능 최적화 학습 시 주의할 점은 무엇인가요?

무제한 병렬 요청은 서버에 과부하를 줄 수 있습니다. Semaphore 나 limitedParallelism 으로 동시 요청 수를 제한하세요.