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
| Catégorie | Actor (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 automatiqueGCD (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 gratuiteFAQ
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.