Actor (Swift 5.5+) vs GCD (DispatchQueue) 比較
構造化された並行処理、コンパイラによるデータ競合フリー
VS
GCD (DispatchQueue)
レガシーなGrand Central Dispatch、iOS 4+
9 分で読了iOS
スコア比較
グラフを読み込み中...
詳細スコア
| カテゴリー | Actor (Swift 5.5+) | GCD (DispatchQueue) |
|---|---|---|
| パフォーマンス | 9/10 | 10/10 |
| 学習のしやすさ | 8/10 | 6/10 |
| エコシステム | 9/10 | 8/10 |
| コミュニティ | 9/10 | 9/10 |
| 求人市場 | 10/10 | 7/10 |
| 将来性 | 10/10 | 6/10 |
長所と短所
Actor (Swift 5.5+)
長所
- コンパイル時のデータ競合安全性
- async/awaitがネイティブ対応
- Swift 6の厳格な並行処理の強制
- @MainActor、@globalActorが明示的
- nonisolatedメソッドでスレッドフリーな読み取り
- Actorホップが透過的
- Swift Testingフレームワークと互換
- デバッグが容易 — コールスタックが明示的
短所
- Swift 5.5+のみ対応
- Actorの分離モデルには学習コストがある
- Sendable適合の厳格なルール
- パフォーマンス上のActorホップのオーバーヘッドはわずかだが存在する
最適な用途
新規のiOS 15+アプリスレッド間で共有される状態Async/awaitワークフローデータ競合に敏感なコード(金融、セキュリティ)Swift 6移行プロジェクト
GCD (DispatchQueue)
長所
- iOS 4+の幅広いサポート
- 15年以上の実運用実績
- グローバルキュー+カスタムキューの柔軟性
- QoSクラス(userInteractive、utility、background)
- DispatchSemaphore、DispatchGroupのプリミティブ
- DispatchSourceTimerによるきめ細かな制御
- 低レベルのパフォーマンスチューニング
- Objective-Cとの相互運用
短所
- データ競合をコンパイル時に検出できない
- コールバック地獄・ネストしたクロージャの可読性の低さ
- @MainActorのような明示性がない — 手動でDispatchQueue.main.asyncを使う必要がある
- デバッグが難しい — スレッドコンテキストの特定にInstrumentsが必要
- Swift 6への移行が困難
最適な用途
レガシーiOSアプリ(iOS 10-14)パフォーマンスが重要な低レベル処理(動画フレーム、音声)Objective-Cコードベースとの相互運用カスタムスケジューリングが必要な要件DispatchSourceTimer、セマフォが必要な場合
コード比較
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
}
}
// 使用例
let cache = UserCache()
let user = await cache.get(id: "123") // actorホップは自動的に発生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
}
}
}結論
Swift 5.5+の新規コードにはActorが必須。レガシーiOS 10-14はGCDのまま。ハイブリッド: 新規モジュールはActor、既存GCDは維持しつつ段階的に移行。Swift 6の厳格な並行処理は2026年に必須化。
無料相談を受けるFAQ
よくある質問
Actorホップは10-50ns — マイクロ秒レベルです。動画処理のような超低レイテンシが求められる場合はまだGCDが優先されますが、それ以外のほぼすべてのケースでActorが適しています。