Concurrency(동시성)은 여러가지 일을 동시에 하는 것을 말함. (multi-core CPU가 이를 가능하게 함)
여러가지 task = 스레드를 의미하기도 하는데, 주로 메인스레드와 백그라운드 스레드를 구분하여 사용하면서
메인스레드는 혼잡하지 않게 빠르게 실행될 수 있도록 유지하고, 오래 걸리는 일은 백그라운드 스레드에 배치하는 식으로 사용한다.
이를 통해서, 사용자가 보는 UI 작업을 모두 메인 스레드에서 실행하게 해서 반응성이 좋게 유지한다.
🚙 🚗 🚕
— — — main thread — — —
🚙 🚕 🚗 🚙 🚕 🚗 🚙 🚕 🚗
— — background thread — —
스레드 생성, 관리를 위한 API
그치만 백그라운드 스레드는 많기 때문에 관리하기 복잡함 → Apple에서 스레드를 관리하기 쉽게 아래와 같은 API를 제공함.
- Grand Central Dispatch (GCD)
- NS Operation Queue
Queue 큐에 대해
큐는 자료구조에서도 봤듯이 FIFO (선입선출, First In First Out) 방식이다.
여기서 (스레드 관리를 위해) 사용되는 큐에는 두가지 종류가 있는데, Serial Queue와 Concurrent Queue가 있다.
- Serial Queue
- serial queue에서는 A → B → C 순으로 실행된다면 A 작업이 다 끝난 후 B 가 실행되고, B가 다 끝나면 C가 실행되는 방식이다.
- 장점
- 실행 순서를 예측하기 쉽다. (실행이 완료되는 순서)
- race condition(경쟁 상태)를 예방할 수 있다.
- 경쟁 상태란, 둘 이상의 스레드 또는 프로세스가 공유 자원에 동시에 접근하면서 실행 결과가 예측할 수 없는 상태가 되는 문제.
- main thread는 serial queue이다.
- Concurrent Queue
- concurrent queue에서는 A → B → C 순으로 실행되기는 하지만, A 작업이 끝나는 것과 상관없이 B 작업을 실행한다. 따라서 경우에 따라 뒷순서의 작업이 더 빨리 완료되기도 한다.
- 장점
- 경우에 따라 작업이 빨리 끝날 수 있음 (Faster)
- 그치만 작업 실행(완료) 순서를 예측하기 어려움 (unpredictable order)
- race condition이 발생할 수 있음
- background thread는 concurrent queue이다.
728x90
'iOS' 카테고리의 다른 글
[iOS] View Life Cycle (UIKit) (0) | 2025.03.28 |
---|---|
[iOS] Delegate & Protocol (0) | 2025.03.26 |
[iOS+@] Dependency Injection (의존성 주입) (0) | 2025.03.24 |
[Swift] 순환참조와 strong, weak, unowned (0) | 2025.03.14 |
[iOS] Combine 기초 (추가 중) (0) | 2025.02.13 |