iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해를 보고 정리한 글입니다.
(유일한)한개, 시리얼, 메인쓰레드
DispathQueue.main.async{}
이런식으로 명명한다.
Dispatch.Queue.global(qos: .userInteractive)
유저와 직접적 인터렉티브 : UI업데이트, 애니메이션, UI반응관련 어떤 것인든 (사용자와 상호 작용) 거의즉시
Dispatch.Queue.global(qos: .userInitiated)
유저가 즉시 필요하긴 하지만, 비동기적으로 처리된 작업(ex. 앱 내에서 pdf파일을 여는것과 같은) 몇 초
Dispatch.Queue.global()
일반적인 작업 디폴트
Dispatch.Queue.global(qos: .utility)
보통 Progress Indicatior와 함께 길게 실행되는 작업, 계산, IO, Networking, 지속적인 데이터 feeds 몇초에서 몇분
Dispatch.Queue.global(qos: .background)
유저가 직접적으로 인지하지 않고(시간이 안 중요함) 작업, 데이터 미리가져오기, 데이터베이스 유지 속도보다는 에너지 효율성 중시, 몇분이상
Dispatch.Queue.global(qos: .unspecified)
legacy API
커스텀 하게 만듦 , 디폴트 설정 (Serial), (Concurrent설정 가능), Qos 설정도 가능
생성방법
let queue = DispatchQueue(label: "com.inflearn.serial")
let queue2 = DispatchQueue(label: "com.inflearn.concurrent", attributes: .concurrent)