iOS의 큐(Queue)

iOS에서는 크게 두 가지의 큐(Queue)가 존재합니다.

  • Dispatch Queue(GCD)⭐️⭐️⭐️ (가장 기본적이며, 많이 사용하는 방법)

    • Dispatch Queue(GCD)는 iOS에서 가장 기본적인 큐입니다.
    • Dispatch Queue(GCD)는 간단한 작업 등을 진행할 때 주로 사용됩니다.
  • Operation Queue

    • Dispatch Queue(GCD)를 바탕으로 여러 가지 기능을 추가하여 만들어진 큐입니다.
    • Operation Queue는 복잡한 작업 및 디테일한 작업 등을 진행할 때 주로 사용됩니다.

Dispatch Queue(GCD)

Dispatch Queue(GCD)는 동작 방식 및 사용 목적에 따라 크게 3가지로 나누어집니다.

📌 메인 큐(Main Queue)

let mainQueue = DispatchQueue.main

mainQueue.async {  // 해당 작업은 1번 쓰레드로 이동하게 됩니다.
    // 코드 작성
}
  • 메인 큐(Main Queue)는 1번 쓰레드(메인 쓰레드)를 의미합니다.

  • 1번 쓰레드에 작업을 보내는 방식이며, 직렬(Serial) 방식으로 처리합니다.


📌 글로벌 큐(Global Queue)와 Qos(Quality of service)

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의 베터리를 집중적으로 사용할 수 있도록 하여 작업을 빨리 끝낼 수 있습니다.)

즉, 우선순위가 높을수록 더 많은 쓰레드를 사용할 수 있습니다.


📌 커스텀/프라이빗 큐(Custom/Private Queue)

let customQueue1 = DispatchQueue(label: "임의의_이름")  // 직렬(Serial) 처리 방식
let customQueue2 = DispatchQueue(label: "임의의_이름", attributes: .concurrent)  // 동시(Concurrent) 처리 방식

customQueue1.async {  // 직렬 처리 방식
    // 코드 작성
}
customQueue2.async {  // 동시 처리 방식
    // 코드 작성
}

커스텀 큐(Custom Queue)는 개발자가 임의로 만드는 큐입니다. 기본 설정은 직렬(Serial) 방식이며, Qos(Quality of service)를 설정할 수도 있습니다.

profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글