Sobes.tech
Junior

Czym jest kolejka Dispatch?

sobes.tech AI

Odpowiedź od AI

Kolejka Dispatch to lekki obiekt wysyłający zadania do wykonania asynchronicznego lub synchronicznego w GCD (Grand Central Dispatch).

Rodzaje kolejek:

  1. Seryjne (Serial): Wykonują zadania w ścisłej kolejności, jedno po drugim.
  2. Równoległe (Concurrent): Wykonują zadania jednocześnie (w zakresie dozwolonym przez system i dostępne rdzenie procesora).

Sposoby uzyskania kolejki:

  • Główna kolejka (Main Queue): Seryjna kolejka powiązana z głównym wątkiem aplikacji (UI).
    let mainQueue = DispatchQueue.main
    
  • Globalne kolejki równoległe (Global Concurrent Queues): Dostarczane przez system z różnymi priorytetami QoS.
    let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)
    
  • Kolejki niestandardowe: Mogą być zarówno seryjne, jak i równoległe.
    let customSerialQueue = DispatchQueue(label: "com.example.mySerialQueue")
    let customConcurrentQueue = DispatchQueue(label: "com.example.myConcurrentQueue", attributes: .concurrent)
    

Wysyłanie zadań:

  • async: Dodaje zadanie do kolejki do wykonania asynchronicznego, nie blokując bieżącego wątku.
    customSerialQueue.async {
        // Zadanie asynchroniczne
    }
    
  • sync: Dodaje zadanie do kolejki do wykonania synchronicznego, blokując bieżący wątek do czasu zakończenia zadania.
    customSerialQueue.sync {
        // Zadanie synchroniczne
    }
    
    Używaj sync ostrożnie, szczególnie na głównej kolejce, aby uniknąć deadlocków.

Zastosowania:

  • Wykonywanie zadań w tle bez blokowania UI.
  • Zarządzanie dostępem do zasobów współdzielonych (kolejki seryjne służą do synchronizacji).
  • Równoległe wykonywanie obliczeń.