티스토리 뷰
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
'Programming' 카테고리의 다른 글
Observer 패턴 (Pub/Sub, 이벤트 리스너) (0) | 2025.04.17 |
---|---|
CRON / Scheduler (1) | 2025.04.17 |
Path Variable의 개념과 대규모 시스템에서의 영향 (0) | 2025.04.17 |
APISIX Lua 플러그인: RESTHeart 데이터 Kafka 및 외부 API 전송 튜토리얼 (0) | 2025.04.16 |
Kafka Connect의 SMT(Single Message Transform)를 활용하여 RESTHeart에 HTTP 요청(조회/등록/수정/삭제) (0) | 2025.04.15 |