동시성 프로그래밍의 필요성
책에서는 다음과 같이 설명하며 나 또한 그렇다고 생각한다.
현대 프로그램들이 한 번에 한 가지 일만 하는 경우는 드물다...
이를 위해서는 특정 작업이 시작된 후 완료를 기다리지 않고 일단 다음 일을 하는 비동기(Asynchronous)가 필요하다고 할 수 있겠다.
모든 작업을 물리적으로 함께 실행하지 않아도 동시성을 실현할 수 있다.
운영체제와 관련하여 생각해본다면 위 문장에 대해 감이 올 것이라고 생각된다. 예를 들어 각 작업을 시분할 하고, 라운드로빈 방식으로 번갈아 실행한다면 싱글 코어 CPU 환경의 사용자 입장에서는 완전히 동시적으로 실행되는 것 처럼 보인다.
진짜 물리적으로 동시에 작업을 수행하는 병렬성
현대에는 대부분의 CPU가 멀티코어이기 때문에 멀티코어 CPU를 이용하면 여러 계산들을 병렬적으로 수행할 수 있으며 이를 병렬성이라고 한다.
코틀린에서의 동시성: 일시 중단 함수와 코루틴
코루틴은 코틀린의 강력한 특징 중 하나라고 책에서는 소개한다. 스레드와 같은 전통적인 방법과 비교했을 때, 코틀린이 훨씬 더 가볍게 동작한다고 한다.
자바 스레드 vs 코루틴
JVM에서 병렬, 동시성 프로그래밍을 위한 고전적인 추상화는 스레드를 사용하는 것이다. 물론 코틀린도 이에 호환되기 때문에 자바에서처럼 스레드를 사용할 수 있게 다음과 같은 API를 제공한다고 한다.
import kotlin.concurrent.thread
fun main() {
println("I'm on ${Thread.currentThread().name}")
thread {
println("And I'm on ${THread.currentThread().name}")
}
}
JVM에서 생성하는 스레드는 일반적으로 OS 레벨 스레드이다.
시스템 스레드를 직접 사용하게 되면 생성하고 관리하는데 비용을 계속 지불해야하며, 어떤 스레드가 작업이 완료되길 기다리는 동안에는 그냥 블록되기 때문에 자원이 낭비된다.
사실 이 부분은 스레드를 사용하면 어쩔 수 없이 감수해야 하는 부분이라고 생각했다, 그렇기 때문에 코루틴이 이를 어떻게 해결하려고 헀는지 더욱 궁금해졌다.
'Kotlin' 카테고리의 다른 글
| Closure란 무엇인가? (0) | 2026.05.06 |
|---|---|
| [우테코 8기 모바일 안드로이드] 레벨 0 4주차 회고 (0) | 2026.02.23 |
| Kotlin in action 2/e: DSL 만들기(1) DSL이란 무엇인가? (0) | 2026.02.23 |
| Kotlin in action 2/e: 어노테이션과 리플렉션(1) 코틀린의 어노테이션 (0) | 2026.02.20 |
| Kotlin in action 2/e: 고차함수: 람다를 파라미터와 반환값으로 사용(2) 인라인 함수, 코틀린 표준 라이브러리의 인라이닝 (0) | 2026.02.19 |