Actor (Swift 5.5+) vs GCD (DispatchQueue) Comparaison

Concurrence structurée, sans data race grâce au compilateur

VS
GCD (DispatchQueue)

Grand Central Dispatch historique, iOS 4+

9 min de lectureiOS

Comparaison des scores

Chargement du graphique...

Notation détaillée

Notation détaillée: Actor (Swift 5.5+) et GCD (DispatchQueue) — notes sur 10, catégorie par catégorie
CatégorieActor (Swift 5.5+)GCD (DispatchQueue)
Performance
9/10
10/10
Facilité d'apprentissage
8/10
6/10
Écosystème
9/10
8/10
Communauté
9/10
9/10
Marché de l'emploi
10/10
7/10
Pérennité
10/10
6/10

Avantages & Inconvénients

Actor (Swift 5.5+)

Avantages

  • Sécurité contre les data races vérifiée à la compilation
  • Support natif d'async/await
  • Application stricte de la concurrence Swift 6
  • @MainActor, @globalActor explicites
  • Méthodes nonisolated pour des lectures sans contrainte de thread
  • Sauts d'acteur transparents
  • Compatible avec le framework Swift Testing
  • Débogage facilité — pile d'appels explicite

Inconvénients

  • Nécessite Swift 5.5+
  • Courbe d'apprentissage pour l'isolation des acteurs
  • Règles strictes de conformité Sendable
  • Léger surcoût de performance lié aux sauts d'acteur, mais bien réel

Idéal pour

Nouvelles applications iOS 15+État partagé entre threadsWorkflows basés sur async/awaitCode sensible aux data races (finance, sécurité)Projets de migration vers Swift 6

GCD (DispatchQueue)

Avantages

  • Prise en charge large depuis iOS 4
  • Éprouvé en production depuis plus de 15 ans
  • Flexibilité des files globales et personnalisées
  • Classes QoS (userInteractive, utility, background)
  • Primitives DispatchSemaphore, DispatchGroup
  • Contrôle fin avec DispatchSourceTimer
  • Réglage de performance bas niveau
  • Interopérabilité avec Objective-C

Inconvénients

  • Ne détecte pas les data races à la compilation
  • Callback hell / lisibilité des closures imbriquées
  • Pas d'équivalent explicite à @MainActor — nécessite DispatchQueue.main.async manuel
  • Débogage difficile — retrouver le contexte du thread nécessite Instruments
  • Migration difficile vers Swift 6

Idéal pour

Applications iOS historiques (iOS 10-14)Traitement bas niveau critique en performance (vidéo, audio)Interopérabilité avec du code Objective-C existantBesoins de planification personnaliséeCas nécessitant DispatchSourceTimer ou des sémaphores

Comparaison de code

Actor (Swift 5.5+)
actor UserCache {
    private var cache: [String: User] = [:]

    func get(id: String) -> User? {
        return cache[id]
    }

    func set(id: String, user: User) {
        cache[id] = user
    }
}

// Utilisation
let cache = UserCache()
let user = await cache.get(id: "123")  // saut d'acteur automatique
GCD (DispatchQueue)
import Foundation

class UserCache {
    private let queue = DispatchQueue(label: "cache", attributes: .concurrent)
    private var cache: [String: User] = [:]

    func get(id: String, completion: @escaping (User?) -> Void) {
        queue.async {
            completion(self.cache[id])
        }
    }

    func set(id: String, user: User) {
        queue.async(flags: .barrier) {
            self.cache[id] = user
        }
    }
}

Conclusion

Pour du nouveau code Swift 5.5+ → les Actors s'imposent. Pour le legacy iOS 10-14 → GCD reste de mise. Approche hybride : nouveaux modules en Actors, ancien code GCD maintenu avec migration progressive. La concurrence stricte de Swift 6 devient obligatoire en 2026.

Obtenir une consultation gratuite
FAQ

Questions fréquentes

Un saut d'acteur (« actor hop ») coûte 10 à 50 ns — de l'ordre de la microseconde. Pour les cas ultra-low-latency comme le traitement vidéo, GCD reste préférable ; pour tout le reste, privilégiez les Actors.

Articles de blog associés

Voir tous les articles

Projets associés

Voir tous les projets
Toutes les comparaisons