Sobes.tech
Middle

Jakie typy kolejek istnieją w Grand Central Dispatch (GCD)?

sobes.tech AI

Odpowiedź od AI

W GCD używane są cztery główne typy kolejek:

  1. Kolejka główna (Main Queue):

    • Kolejka seryjna.
    • Używana do wykonywania zadań na głównym wątku aplikacji (aktualizacje UI, obsługa zdarzeń).
    • Zawsze jedna na aplikację.
  2. Globalne kolejki współbieżne (Global Concurrent Queues):

    • Kolejki współbieżne.
    • Dostarczane przez system.
    • Mają różne poziomy priorytetu jakości obsługi (Quality of Service - QoS).
    • Mogą wykonywać wiele zadań jednocześnie.
  3. Niestandardowe kolejki seryjne (Custom Serial Queues):

    • Kolejki seryjne tworzone przez programistę.
    • Wykonują zadania kolejno, jedno po drugim.
    • Idealne do zarządzania dostępem do zasobów (synchronizacja).
  4. Niestandardowe kolejki współbieżne (Custom Concurrent Queues):

    • Kolejki współbieżne tworzone przez programistę.
    • Mogą wykonywać wiele zadań jednocześnie.
    • Pozwalają na lepszą kontrolę wykonywania zadań w porównaniu do globalnych kolejek współbieżnych.

Przykłady tworzenia kolejek:

// Kolejka główna
let mainQueue = DispatchQueue.main

// Jedna z globalnych kolejek współbieżnych (o wysokim priorytecie)
let globalHighPriorityQueue = DispatchQueue.global(qos: .userInitiated)

// Niestandardowa kolejka seryjna
let customSerialQueue = DispatchQueue(label: "com.myapp.serialqueue")

// Niestandardowa kolejka współbieżna
let customConcurrentQueue = DispatchQueue(label: "com.myapp.concurrentqueue", attributes: .concurrent)

Priorytety QoS dla kolejek globalnych:

Priorytet QoS Opis
.userInteractive Zadania związane z interfejsem użytkownika (odpowiedź na kliknięcia).
.userInitiated Zadania inicjowane przez użytkownika (ładowanie treści na żądanie).
.default Priorytet domyślny, pomiędzy .userInitiated a .utility.
.utility Długie zadania w tle (pobieranie plików).
.background Zadania o niskim priorytecie, niezależne od użytkownika.
.unspecified System określa priorytet.