본문 바로가기
iOS/Swift

GCD vs Swift Concurrency 동작 원리 비교 (Swift Concurrency를 들어가면서...)

by iOS rOar 2025. 7. 5.

GCD vs Swift Concurrency

1. 쓰레드 관리 방식

  • GCD
    • 선점형 쓰레드 스케줄링(Preemptive Threading): 운영체제가 강제로 쓰레드를 전환함.
    • Context Switching 비용: 쓰레드 간 전환 시 레지스터 상태 저장/복원 등의 오버헤드가 발생함.
    • 쓰레드 폭발(Thread Explosion): 많은 작업이 동시에 실행되면 쓰레드가 과도하게 생성되어 시스템 성능이 저하됨.
  • Swift Concurrency
    • 협력적 쓰레드 풀(Cooperative Thread Pool): 작업들이 자발적으로 양보하며 실행됨.
    • 비선점형(Non-Blocking): await 키워드에서 의해 작업이 중단되고, 해당 쓰레드는 다른 작업을 처리할 수 있음.
    • 적은 쓰레드로 많은 작업: CPU 코어 수에 맞춰 최적화된 개수의 쓰레드로 수많은 Task를 처리함.

2. 메모리 효율성

  • GCD
    • 쓰레드 스택 메모리 문제: 작업이 간단해도 각 쓰레드가 전체 스택 메모리를 미리 할당받아 낭비됨
    • 쓰레드 컨텍스트 오버헤드: 각 쓰레드마다 CPU 레지스터 상태와 시스템 관리 메타데이터를 저장해야 함
    • 메모리 단편화: 모든 쓰레드가 동일한 크기로 할당되어 메모리 공간이 비효율적으로 사용됨
  • Swift Concurrency
    • 필요한 만큼만 할당: Task는 실제 필요한 상태 정보만 힙에 동적으로 저장함
    • 쓰레드 재사용: 소수의 쓰레드를 여러 Task가 공유하여 메모리 사용량을 크게 절약함

3. 실행 흐름

  • GCD
    • 작업1 -> 쓰레드1 할당 -> 쓰레드1 블로킹 -> 스위칭 -> 쓰레드2 ...
  • Swift Concurrency
    • Task1 -> await 중단 -> Task2 실행 ...

4. 성능

  • GCD
    • Context Switching 비용이 크고, 쓰레드 생성/제거 오버헤드 존재
  • Swift Concurrency
    • Suspension/Resume 비용이 적고, 쓰레드 재사용으로 오버헤드 최소화