iOS에서는 크게 두 가지의 큐(Queue)가 존재합니다.
Dispatch Queue(GCD)⭐️⭐️⭐️ (가장 기본적이며, 많이 사용하는 방법)
Operation Queue
Dispatch Queue(GCD)는 동작 방식 및 사용 목적에 따라 크게 3가지로 나누어집니다.
let mainQueue = DispatchQueue.main mainQueue.async { // 해당 작업은 1번 쓰레드로 이동하게 됩니다. // 코드 작성 }
메인 큐(Main Queue)는 1번 쓰레드(메인 쓰레드)를 의미합니다.
1번 쓰레드에 작업을 보내는 방식이며, 직렬(Serial) 방식으로 처리합니다.
let globalQueue1 = DispatchQueue.global(qos: .userInteractive) let globalQueue2 = DispatchQueue.global(qos: .userInitiated) let globalQueue3 = DispatchQueue.global() // 가장 기본적인 글로벌 큐 + 가장 많이 사용하는 큐 let globalQueue4 = DispatchQueue.global(qos: .utility) let globalQueue5 = DispatchQueue.global(qos: .background) let globalQueue6 = DispatchQueue.global(qos: .unspecified) globalQueue<N>.async { // 작업을 동시적으로 처리 // 코드 작성 }
글로벌 큐(Global Queue)는 서비스의 품질(Qos)에 따라 여러 종류로 나누어지며, 기본적으로 동시(Concurrent) 방식으로 처리합니다.
⚙️ Qos(Quality of service)
개발자가 서비스의 품질 Qos를 설정하면, 운영체제(iOS)가 알아서 작업들의 중요성(우선순위)을 인지하고 쓰레드에 우선순위를 매겨 더 많은 쓰레드를 배치합니다. (CPU의 베터리를 집중적으로 사용할 수 있도록 하여 작업을 빨리 끝낼 수 있습니다.)
즉, 우선순위가 높을수록 더 많은 쓰레드를 사용할 수 있습니다.
let customQueue1 = DispatchQueue(label: "임의의_이름") // 직렬(Serial) 처리 방식 let customQueue2 = DispatchQueue(label: "임의의_이름", attributes: .concurrent) // 동시(Concurrent) 처리 방식 customQueue1.async { // 직렬 처리 방식 // 코드 작성 } customQueue2.async { // 동시 처리 방식 // 코드 작성 }
커스텀 큐(Custom Queue)는 개발자가 임의로 만드는 큐입니다. 기본 설정은 직렬(Serial) 방식이며, Qos(Quality of service)를 설정할 수도 있습니다.