Sobes.tech
Junior

Τι είναι η ουρά Dispatch;

sobes.tech AI

Απάντηση από AI

Η ουρά Dispatch είναι ένα ελαφρύ αντικείμενο που στέλνει εργασίες για ασύγχρονη ή συγχρονική εκτέλεση στο GCD (Grand Central Dispatch).

Τύποι ουρών:

  1. Σειριακές (Serial): Εκτελούν εργασίες αυστηρά με τη σειρά, μία μετά την άλλη.
  2. Παράλληλες (Concurrent): Εκτελούν εργασίες ταυτόχρονα (όσο επιτρέπει το σύστημα και οι διαθέσιμοι πυρήνες).

Τρόποι απόκτησης ουράς:

  • Κύρια ουρά (Main Queue): Μια σειριακή ουρά που συνδέεται με το κύριο νήμα της εφαρμογής (UI).
    let mainQueue = DispatchQueue.main
    
  • Παγκόσμιες παράλληλες ουρές (Global Concurrent Queues): Παρέχονται από το σύστημα με διαφορετικές προτεραιότητες QoS.
    let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)
    
  • Προσαρμοσμένες ουρές: Μπορούν να είναι τόσο σειριακές όσο και παράλληλες.
    let customSerialQueue = DispatchQueue(label: "com.example.mySerialQueue")
    let customConcurrentQueue = DispatchQueue(label: "com.example.myConcurrentQueue", attributes: .concurrent)
    

Αποστολή εργασιών:

  • async: Προσθέτει μια εργασία στην ουρά για ασύγχρονη εκτέλεση, χωρίς να μπλοκάρει το τρέχον νήμα.
    customSerialQueue.async {
        // Ασύγχρονη εργασία
    }
    
  • sync: Προσθέτει μια εργασία στην ουρά για συγχρονική εκτέλεση, μπλοκάροντας το τρέχον νήμα μέχρι να ολοκληρωθεί.
    customSerialQueue.sync {
        // Συγχρονική εργασία
    }
    
    Χρησιμοποιήστε το sync με προσοχή, ειδικά στην κύρια ουρά, για να αποφύγετε deadlocks.

Εφαρμογές:

  • Εκτέλεση εργασιών φόντου χωρίς να μπλοκάρει το UI.
  • Διαχείριση πρόσβασης σε κοινόχρηστους πόρους (οι σειριακές ουρές χρησιμοποιούνται για συγχρονισμό).
  • Παραλληλοποίηση υπολογισμών.