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 비용이 적고, 쓰레드 재사용으로 오버헤드 최소화
'iOS > Swift' 카테고리의 다른 글
| 클로저(Closure) 이름없는 무서운녀석. (0) | 2022.08.09 |
|---|---|
| 클래스(Class)와 구조체(Struct) (0) | 2022.08.02 |
| 열거형(Enumeration)에 대해 알아보자! (0) | 2022.08.02 |
| 저장 타입 속성(Stored Type Properties)에 대해 알아보기!! (0) | 2022.07.21 |
| Swift Collection에 대해 알아보자!! (0) | 2022.07.12 |