멀티코어와 멀티 프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 개발한 기술이다
스레드 풀의 관리를 개발자가 아닌 운영체제에서 관리하기에 태스크를 비동기적으로 쉽게 사용이 가능하다.
개발자가 실행할 task 를 생성하고 dispatch Queue에 추가하면 GCD 는 태스크에 맞는 스레드를 자동으로 생성하여 실행하고 작업이 끝나면 해당 스레드를 제거합니다
Dispatch Queue (디스패치 대기열)
작업을 연속적 또는 동시에 진행하기는 하지만 먼저 들어온 작업이 먼저 나가는 순서로 실행된다.
Serial Dispatch Queue
한번에 하나의 작업만을 실행하며, 해당 작업이 대기열에서 제외되고 새로운 작업이 실행될때까지 기다린다.
Concurrent Dispatch Queue
이미 시작된 작업이 완료될 때까지 기다리지 않고 가능한 많은 작업ㅇ르 진행한다.
Dispatch Source
특정 유형의 시스템 이벤트를 비동기적으로 처리하기 위한 c기반 메커니즘이다.
특정 유형의 이벤트에 대한 정보를 캡슐화 하고, 해당 이벤트가 발생할때마다 , 특정 클로저 , 객체 , 기능을 디스패치 대기열에 전달한다
Operation Queue 연산대기열
concurrent dispatch queue와 동일하게 동작하며, operation Queue에 의해 구현된다.
Dispatch Queue는 FIFO로 작업 실행하지만 연산대기열은 작업의 순서를 결정할때 다른 요인들을 고려한다.
Dispatch Queue 는 Operation Queue 와 매우 유사한 클래스이다.
Dispatch Queue vs Operation Queue
Operation Queue는 동시에 실행할수 있는 연산의 최대 수를 지정할 수 있다.
KVO(Key Value Observing)을 사용할 수 있는 많은 프로퍼티들이 있다.
연산을 일시중지, 다시시작, 취소를 할 수 있다.
Operation Queue : 비동기적으로 실행해야 하는 작업을 객체 지향적인 방법으로 사용하는데 적합, KVO를 이용 작업 진행 상황을 감시하는 방법이 필요할 때도 적합
GCD : 작업이 복잡하지 않고 간단하게 처리하거나 특정 유형의 시스템 이벤트를 비동기적으로 처리할때 적합하다 ex) 타이머, 프로세스 등 관련 이벤트