Process vs. Thread vs. Coroutine

Process, Thread, Coroutine은 모두 프로그램 실행의 단위이지만, 각각 다른 특성과 용도를 가지고 있다.

  1. Process:

    • 독립적인 실행 단위로, 자체 메모리 공간과 시스템 자원을 가진다.
    • 다른 프로세스와 완전히 격리되어 있어 안정성이 높다.
    • 생성과 전환에 많은 비용이 든다.
  2. Thread:

    • 프로세스 내부의 실행 단위로, 같은 프로세스의 다른 스레드와 메모리를 공유한다.
    • 프로세스보다 가볍고, 생성과 전환 비용이 적다.
    • 동시성을 제공하지만, 동기화 문제에 주의해야 한다.
  3. Coroutine:

    • 경량 스레드라고도 불리며, 스레드 내에서 실행되는 협력적 멀티태스킹 단위.
    • 매우 가볍고, 생성과 전환 비용이 매우 적다.
    • 비동기 프로그래밍을 단순화하고, 동시성을 효율적으로 관리한다.

Process, Thread, Coroutine의 관계는 다음과 같이 계층적으로 표현할 수 있다:
CPU > Core > Process > Thread > Coroutine

  • 프로세스는 독립적인 메모리 공간을 가지며, 하나 이상의 스레드를 포함한다.
  • 스레드는 프로세스 내에서 실행되며, 같은 프로세스의 메모리를 공유한다.
  • 코루틴은 스레드 내에서 실행되는 더 가벼운 실행 단위이다.
    이 구조는 각 단위의 특성과 리소스 사용을 잘 보여준다.
    프로세스가 가장 무겁고, 코루틴이 가장 가벼운 실행 단위이다.

Coroutine in User-level Thread
https://choi-geonu.medium.com/%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%93%A4%EC%9D%B4-%EC%95%8C%EC%95%84%EC%95%BC%ED%95%A0-%EB%8F%99%EC%8B%9C%EC%84%B1-6-coroutine-9eecdbeb2d2d

Process vs. Thread vs. Coroutine 비교

특성ProcessThreadCoroutine
정의독립적인 실행 단위로 자체 메모리 공간 보유프로세스 내의 실행 단위로 메모리 공유협력적 멀티태스킹을 위한 서브루틴
메모리 공유독립적인 메모리 공간같은 프로세스의 메모리 공유같은 스레드의 메모리 공유
컨텍스트 스위칭 비용매우 높음중간매우 낮음
생성/소멸 비용높음중간낮음
자원 사용많음중간적음
통신 방식IPC (파이프, 소켓 등)공유 메모리, 뮤텍스yield/await
병렬 처리실제 병렬 처리 가능실제 병렬 처리 가능동시성만 제공 (병렬x)
적합한 작업CPU 집약적 작업I/O + CPU 혼합 작업I/O 집약적 작업
에러 영향다른 프로세스에 영향 없음같은 프로세스의 스레드들에 영향명시적 에러 처리 필요
디버깅 난이도쉬움어려움중간
확장성높음 (여러 CPU 코어)중간단일 스레드 내 제한
메모리 격리완전 격리부분 공유공유

실행 모델 비교

실행 모델ProcessThreadCoroutine
스케줄링 주체OSOS프로그램
선점 여부선점형선점형비선점형
컨텍스트 스위치OS 레벨OS 레벨사용자 레벨
동시성 모델진정한 병렬성진정한 병렬성협력적 멀티태스킹

리소스 사용 비교

리소스ProcessThreadCoroutine
메모리 사용량높음 (독립 메모리)중간 (공유 메모리)낮음 (최소 오버헤드)
CPU 사용높음중간낮음
시스템 리소스많음중간적음
스택 크기독립적독립적공유

성능 특성 비교

성능 특성ProcessThreadCoroutine
생성 시간느림중간빠름
컨텍스트 스위치 시간느림중간빠름
메모리 접근독립적 (느림)공유 (빠름)공유 (매우 빠름)
확장성 한계CPU 코어 수시스템 리소스이벤트 루프 성능

사용 사례별 비교

사용 사례적합한 모델이유
대규모 데이터 처리Process메모리 격리와 CPU 활용
웹 서버Thread/CoroutineI/O 작업 처리에 효율적
실시간 게임Thread낮은 지연시간 필요
GUI 애플리케이션Thread사용자 인터페이스 반응성
네트워크 서비스Coroutine많은 동시 연결 처리
이미지/비디오 처리ProcessCPU 집약적 작업

참고 및 출처