티스토리 뷰

728x90

Thread, Coroutine, Green Thread는 모두 동시성(Concurrency)병렬성(Parallelism) 을 다루기 위한 실행 단위이지만, 운영 방식과 무게감, 어디서 스케줄링되는지(OS vs 사용자) 에 따라 명확히 구분됩니다.


🧵 1. Thread (쓰레드)

✅ 정의

  • OS(운영체제)가 관리하는 실행 단위
  • 하나의 프로세스 내부에서 여러 개의 작업을 동시에 처리할 수 있게 해줌
  • 무거움 (Heavyweight): 생성, 전환, 관리 비용이 큼

✅ 특징

  • 각각 독립된 스택(stack) 을 가짐
  • OS 수준에서 스케줄링되며, CPU 코어 수만큼 진짜 병렬 실행 가능
  • 하지만 context switching(문맥 교환) 비용이 큼

✅ 예시

Thread t1 = new Thread(() -> {
    System.out.println("Hello from thread!");
});
t1.start();

🪢 2. Coroutine (코루틴)

✅ 정의

  • 사용자 수준에서 동작하는 경량 실행 단위
  • 비동기 작업을 직관적으로 작성할 수 있게 해줌
  • 일반적으로 async/await, yield 같은 키워드로 사용됨

✅ 특징

  • 스택을 공유하면서 한 스레드 안에서 수천 개의 코루틴 실행 가능
  • OS가 아닌 언어 런타임이나 프레임워크가 직접 스케줄링
  • 블로킹 없이 비동기 코드 작성 가능

✅ 예시: Kotlin

GlobalScope.launch {
    println("Hello from coroutine!")
}

✅ 예시: Python

async def main():
    await asyncio.sleep(1)
    print("Hello from coroutine")

🍃 3. Green Thread (그린 쓰레드)

✅ 정의

  • OS에 의존하지 않고, 사용자 수준에서 구현된 가짜 쓰레드
  • 실제 OS Thread는 단 하나만 사용하고, 그 위에 다수의 Green Thread를 소프트웨어적으로 스케줄링

✅ 특징

  • 코루틴과 유사하지만 일반적인 쓰레드 API처럼 보이도록 래핑
  • JVM 기반 언어에서 과거에 많이 사용 (예: Java Green Thread)
  • 현대에는 Go 언어의 Goroutine이나 Erlang의 Actor가 비슷한 개념

✅ 예시: Go (실제로는 Green Thread 구조)

go func() {
    fmt.Println("Hello from goroutine")
}()

🔍 차이점 요약 비교

항목  Thread  Coroutine  Green Thread
실행 단위 OS 수준 사용자 수준 사용자 수준
스케줄링 OS가 담당 런타임/프레임워크가 담당 사용자 레벨 스케줄러
무게감 Heavy (무거움) Light (가벼움) 중간
병렬 실행 가능 (멀티코어) 단일 스레드 위에서 순차 실행 단일 스레드 기반
문맥 전환 비용 높음 (CPU 컨텍스트 스위칭) 낮음 (함수 상태만 저장) 낮음
예시 언어 Java, C++, Python 기본 Thread Kotlin, Python (asyncio), JavaScript (Promise) Go(Goroutine), Erlang(Actor), Java Green Thread(과거)

🎯 정리

  • Thread: OS가 직접 관리, 진짜 병렬 실행 가능하지만 무겁고 비용이 큼
  • Coroutine: 하나의 스레드 안에서 많은 작업을 순차/비동기로 처리 (Lightweight), async 코드 작성에 유리
  • Green Thread: OS에 의존하지 않고 사용자 레벨에서 다수의 작업을 병렬처럼 처리, 최근에는 Goroutine 등으로 진화

 

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함