Closed heydoy closed 1 year ago
GCD는 멀티쓰레딩 처리를 OS에서 편리하게 처리해주는 해주는 Apple이 제공하는 API로 DispatchQueue를 통해 작업을 관리합니다.
이 dispatchQueue는 두 종류로 나뉘는데
Serial Queue 작업은 하나의 스레드에 할당이 되며 등록된 작업을 순차적으로 처리하는 방식으로 main thread는 Serial Queue이다. UIApplication의 인스턴스가 main thread에서 처리되기 때문에 모든 UI는 main thread에서 처리되어야만 한다.
Concurrent Queue 작업을 여러 스레드에 분산하여 할당하고 등록된 작업을 동시에 처리를 하는 방식 그렇기때문에 작업 순서를 보장하지 못한다.
동시작업을 관리하기 위한 Low Level API (Lock과 Thread보다 작업하기 쉬운 모델) GCD를 사용하면 대상이 되는 작업(Task)를 대기행렬(큐)에 보내기만 하면 OS가 알아서 스레드를 생성/관리/해제하며 분산처리
Concurrent Queue : iOS 프로세스나 앱은 한 개 이상의 스레드로 구성, OS 스케줄러는 각 스레드를 독립적으로 관리, 각 스레드는 동시적으로 실행될 수 있지만, 시스템이 어떤 것이 언제 어떻게 수행되는지는 예측할 수 없음
Serial Queue : 오직 하나의 스레드에 할당. 따라서 순차적으로 처리되는 특징이 있고, 순서가 중요한 작업과 공유 자원에 동시에 접근하지 못하도록 Mutual Exclusion을 구현해야 하는 경우(Thread-safe) 등의 경우에 사용됩니다.