[kotlin] 동시성과 병렬성 개념 이해하기

목차


동시성 vs. 병렬성

동시성(Concurrency)은 여러 작업을 동시에 다루는 것을 의미하며, 이는 메인 작업과 연관된 작은 작업들이 번갈아 가며 실행되는 것을 말합니다. 이는 한 번에 여러 작업을 처리할 수 있는 것처럼 보일 수 있지만, 실제로는 동시에 실행되는 것은 아닙니다.

병렬성(Parallelism)은 여러 작업을 동시에 처리하는 것을 의미하며, 실제로 병렬로 실행됨을 의미합니다.

Kotlin에서의 동시성 지원

Kotlin은 coroutine을 통해 동시성을 지원합니다. coroutine은 비동기적으로 실행되며, 일시 중단 및 재개될 수 있는 가벼운 스레드를 나타냅니다. suspend 키워드를 사용하여 함수가 일시 중단될 수 있음을 나타내고, launch, async, await 등의 키워드를 통해 쉽게 동시성 작업을 다룰 수 있습니다.

import kotlinx.coroutines.*

fun main() = runBlocking {
    val job = launch {
        delay(1000)
        println("World!")
    }
    println("Hello,")
    job.join()
}

Kotlin에서의 병렬성 지원

Kotlin은 coroutine을 활용하여 병렬성을 구현할 수 있습니다. asyncawait를 사용하여 다수의 작업을 동시에 시작하고, 결과를 모아 최종 결과로 처리할 수 있습니다.

import kotlinx.coroutines.*

suspend fun doWork1(): Int {
    delay(1000) // 가상의 작업 수행
    return 13
}

suspend fun doWork2(): Int {
    delay(1500) // 가상의 작업 수행
    return 29
}

fun main() = runBlocking {
    val result1 = async { doWork1() }
    val result2 = async { doWork2() }
    println("Result: ${result1.await() + result2.await()}")
}

정리

Kotlin은 coroutine을 통해 동시성과 병렬성을 지원하여 복잡한 비동기 작업을 쉽게 다룰 수 있습니다. 이를 통해 성능 향상과 간편한 비동기 프로그래밍을 지원합니다.

참고 문헌: