Grand Central Dispatch
멀티코어와 멀티 프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 개발한 기술
스레드 풀의 관리를 프로그래머가 아닌 운영체제에서 관리
➡️ 프로그래머가 작업(task)를 비동기적으로 쉽게 사용할 수 있음
프로그래머가 실행할 작업을 생성하고, Dispatch Queue에 추가하면 GCD는 작업에 맞는 스레드를 자동으로 생성해서 실행하고,
작업이 종료되면 해당 스레드를 제거해 줌
DispatchQueue
작업을 연속적 / 동시에 진행하기는 하지만, 언제나 FIFO로 실행됨
Serial Dispatch Queue : 한 번에 하나의 작업만을 실행
➡️ 해당 작업이 queue에서 제외되고 새로운 작업이 시작되기 전까지 기다림
Concurrent Dispatch Queue : 가능한 많은 작업을 진행
➡️ 이미 시작된 작업이 완료될 때까지 기다리지 않음
OperationQueue 와의 차이점?
Concurrent Dispatch Queue와 동일하게 동작하며, Operation Queue 클래스에 의해 구현됨
1. Dispatch Queue는 FIFO로 작업을 실행하지만, Operation Queue는 실행 순서를 결정할 때 다른 요인들을 고려함
2. Operation Queue에서는 동시에 실행할 수 있는 Operation의 최대 수를 지정할 수 있음
3. Operation Queue에는 KVO (Key Value Observing)을 사용할 수 있는 많은 프로퍼티들이 존재
4. Operation Queue에서는 Operation 일시 중지, 재시작, 취소 가능
어떤 상황에 적합할까?
Operation Queue
비동기적으로 실행되어야 하는 작업을 객체 지향적인 방법으로 사용할 때
KVO를 사용해 작업 진행 상황을 감시하는 방법이 필요할 때 -> DispatchQueue와 다르게, 취소 작업이 가능함
GCD
작업이 복잡하지 않고 간단하게 처리할 때
특정 유형의 시스템 이벤트를 비동기적으로 처리할 때
ex. 타이머, 프로세스와 관련된 이벤트
KVO ?
'iOS' 카테고리의 다른 글
[iOS] DispatchQueue로 비동기 프로그래밍 (0) | 2020.06.08 |
---|---|
[iOS] 서버에 데이터 요청하기 : URLSessionDataTask (0) | 2020.06.08 |
[iOS] URLSession과 URLSessionDataTask (0) | 2020.06.08 |
[iOS] OperationQueue로 비동기 프로그래밍 (0) | 2020.06.08 |
[iOS] 비동기 프로그래밍과 동시성 프로그래밍 (0) | 2020.06.08 |