Sobes.tech
Middle

Quels types de files d'attente existent dans Grand Central Dispatch (GCD) ?

sobes.tech IA

Réponse de l'IA

Dans GCD, quatre types principaux de files d'attente sont utilisés:

  1. File d'attente principale (Main Queue):

    • File d'attente sérielle.
    • Utilisée pour exécuter des tâches sur le thread principal de l'application (mise à jour de l'UI, gestion des événements).
    • Il y en a toujours une par application.
  2. Files d'attente globales concurrentes (Global Concurrent Queues):

    • Files d'attente concurrentes.
    • Fournies par le système.
    • Ont différents niveaux de priorité de qualité de service (Quality of Service - QoS).
    • Peuvent exécuter plusieurs tâches simultanément.
  3. Files d'attente sérialisées personnalisées (Custom Serial Queues):

    • Files d'attente sérialisées créées par le développeur.
    • Exécutent des tâches de manière séquentielle, l'une après l'autre.
    • Idéales pour gérer l'accès aux ressources (synchronisation).
  4. Files d'attente concurrentes personnalisées (Custom Concurrent Queues):

    • Files d'attente concurrentes créées par le développeur.
    • Peuvent exécuter plusieurs tâches simultanément.
    • Permettent un meilleur contrôle de l'exécution des tâches par rapport aux files d'attente globales concurrentes.

Exemples de création de files d'attente:

// File d'attente principale
let mainQueue = DispatchQueue.main

// Une des files d'attente globales concurrentes (à haute priorité)
let globalHighPriorityQueue = DispatchQueue.global(qos: .userInitiated)

// File d'attente sérialisée personnalisée
let customSerialQueue = DispatchQueue(label: "com.myapp.serialqueue")

// File d'attente concurrente personnalisée
let customConcurrentQueue = DispatchQueue(label: "com.myapp.concurrentqueue", attributes: .concurrent)

Priorités QoS pour les files d'attente globales:

Priorité QoS Description
.userInteractive Tâches liées à l'interface utilisateur (réponse aux clics).
.userInitiated Tâches initiées par l'utilisateur (chargement de contenu à la demande).
.default Priorité par défaut, entre .userInitiated et .utility.
.utility Tâches longues en arrière-plan (téléchargement de fichiers).
.background Tâches de faible priorité, indépendantes de l'utilisateur.
.unspecified Le système détermine la priorité.