스레드(Thread)의 정의: 스레드는 프로그램 내에서 독립적인 실행 흐름을 의미하며, 기본적으로 모든 프로그램은 '메인 스레드'라는 하나의 스레드에서 순차적으로 실행됩니다. 🧵
블로킹 코드(Blocking Code): 특정 스레드의 실행을 멈추고 해당 작업이 완료될 때까지 다른 작업을 수행할 수 없게 만드는 코드를 말하며, 이는 CPU 집약적인 작업에서 흔히 발생합니다. 🚧
새로운 스레드 생성의 이점: 메인 스레드에서 블로킹 코드를 분리하여 새로운 스레드에서 실행하면, 메인 스레드는 블로킹 코드의 완료를 기다리지 않고 다른 작업을 계속 진행할 수 있어 프로그램의 응답성을 높입니다. 🚀
병렬성(Parallelism)과 동시성(Concurrency)의 차이: 병렬성은 여러 CPU 코어를 사용하여 여러 작업을 동시에 실행하는 것을 의미하며, 동시성은 단일 CPU 코어에서도 빠르게 작업을 전환하며 여러 작업이 동시에 실행되는 것처럼 보이는 환상을 제공하는 것으로, 유휴 시간을 지능적으로 활용하는 개념입니다. 👯⏱️
코루틴(Coroutine)의 개념: 코루틴은 스레드 내에서 실행되는 경량의 독립적인 실행 흐름으로, suspend 키워드를 통해 정의되는 '서스펜딩 코드'를 포함합니다. 💡
코루틴의 핵심: 서스펜션(Suspension): 코루틴은 I/O 대기나 delay와 같은 유휴 상태에 진입할 때 스스로 '서스펜드'될 수 있으며, 이 시간 동안 동일한 스레드 내의 다른 코루틴이 실행될 수 있도록 CPU 자원을 양보합니다. 😴
코루틴과 스레드의 관계: 하나의 스레드는 여러 코루틴을 호스팅할 수 있으며, 코루틴은 스레드의 하위 개념으로 스레드 위에서 동작합니다. 코루틴은 스레드의 효율적인 활용을 돕는 '스레드의 업그레이드'로 볼 수 있습니다. ⬆️
코루틴의 동시성 구현: 코루틴은 스레드를 블로킹하지 않고 유휴 시간에 다른 코루틴으로 전환함으로써, 단일 스레드에서도 여러 작업을 효율적으로 동시 처리할 수 있게 합니다. 🔄