Sobes.tech
Middle

Parlez de la file d'attente globale dans la programmation multithread sur iOS.

sobes.tech IA

Réponse de l'IA

La file d’attente globale (Global Queue) dans Grand Central Dispatch (GCD) sont des files d’attente prédéfinies du système accessibles à toutes les applications. Ce sont des files d’attente concurrentes, ce qui signifie que les tâches qu’elles contiennent peuvent s’exécuter en parallèle sur différents threads.

Caractéristiques principales :

  • Types : Varient selon le niveau de qualité de service (QoS - Quality of Service).
  • QoS : Détermine la priorité d’exécution des tâches, influençant celles que le système doit exécuter plus rapidement.
  • Parallélisme : Permettent d’exécuter plusieurs tâches simultanément.
  • Systèmes : Créées et gérées par le système d’exploitation.

Types de files d’attente globales (par ordre décroissant de priorité) :

Niveau de QoS Description
userInteractive Tâches affectant directement l’interface utilisateur (animations, événements).
userInitiated Tâches initiées par l’utilisateur, mais ne bloquant pas l’UI (chargement de contenu).
default Niveau par défaut sans indication explicite de QoS.
utility Tâches nécessitant du temps d’exécution, mais n’affectant pas immédiatement l’UI (chargement de gros fichiers).
background Tâches exécutées en arrière-plan, invisibles pour l’utilisateur (synchronisation de données).
unspecified Utilisé rarement lorsque le QoS n’est pas important. Équivalent à default.

Accès aux files d’attente globales :

// Obtenir une file d’attente globale avec un niveau de QoS spécifique
let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)

// Obtenir la file d’attente globale par défaut
let defaultQueue = DispatchQueue.global()

Utilisation des files d’attente globales pour exécuter des tâches :

// Exécuter une tâche de manière asynchrone dans une file en arrière-plan
DispatchQueue.global(qos: .background).async {
    // Code qui prend du temps, sans bloquer l’UI
}

// Exécuter une tâche de manière synchrone dans la file (moins courant pour les files globales)
DispatchQueue.global(qos: .userInitiated).sync {
    // Code qui doit être terminé avant de continuer le thread actuel
}

Il est important de se rappeler :

  • Ne pas exécuter de tâches affectant directement l’interface utilisateur dans les files d’attente globales (sauf userInteractive pour des opérations très rapides). Pour mettre à jour l’UI, utilisez la file principale (DispatchQueue.main).
  • Les files d’attente globales sont destinées à l’exécution parallèle. L’ordre d’exécution des tâches peut ne pas être garanti.
  • Lors de l’utilisation de sync dans une file globale, le thread actuel sera bloqué jusqu’à ce que la tâche soit terminée. Cela peut entraîner un blocage de l’UI si appelé depuis le thread principal.