Section 17/172 menit
17. Ringkasan & Decision Guide
17. Ringkasan & Decision Guide
Decision Tree: Actor Instance vs Global Actor vs MainActor vs Sendable struct
| Pertanyaan | → |
|---|---|
| State-nya UI atau berinteraksi dengan UIKit/SwiftUI? | @MainActor |
| Apakah kamu butuh banyak instance independen dengan state masing-masing? | actor instance |
| Apakah ada resource singleton yang dipakai banyak class? | Custom @globalActor |
| Apakah tipe ini hanya value/data tanpa mutable state? | Sendable struct/enum |
| Apakah method/property butuh thread-safety tapi tanpa lifetime instance? | enum namespace dengan static |
Decision Tree: Sendable vs sending vs isolated parameter
| Kebutuhan | → |
|---|---|
| Mengirim immutable value antar isolation | Sendable |
| Mengirim non-Sendable builder sekali ke actor lain | sending |
| Banyak akses sequential ke actor yang sama | isolated parameter |
| Closure dipanggil dari isolation berbeda | @Sendable closure |
| Closure perlu jalan di actor tertentu dinamis | isolated(any) + #isolation |
Checklist Review Code Concurrent
- Setelah
awaitdalam method actor, apakah invariant state masih valid? - Apakah
@unchecked Sendablepunya synchronization (lock/atomic) di dalamnya? - Apakah
MainActor.runbisa digantiMainActor.assumeIsolated? - Apakah ada loop yang
awaitactor method per iterasi (bisa jadi batch)? - Apakah ada Task creation di hot path (bisa jadi TaskGroup)?
- Apakah custom executor benar-benar serial?
- Apakah CPU-heavy work jalan di luar
@MainActor? - Apakah closure
@Sendablecapture mutable state?
Apa yang Harus Dipelajari Selanjutnya
swift-async-algorithms.md— operator pipeline untukAsyncSequenceyang sering bertemu dengan isolation.swift6-synchronization.md—Mutex/Atomicuntuk kasus low-level di mana actor terlalu mahal.swift-isolation-vip-uikit.md— pattern integrasi isolation di UIKit dengan arsitektur VIP.
Penutup
Actor, MainActor, dan Sendable bukan tiga fitur terpisah — mereka satu sistem koheren untuk isolation. Saat kamu memahami:
- Actor = state + serial executor (bukan mutex).
- MainActor = global actor dengan executor main thread.
- Sendable = compile-time guarantee untuk cross-isolation transfer.
- Region-based isolation = jalan keluar dari "Sendable trap" untuk transfer sekali.
…kamu bisa membaca kode konkuren Swift dengan benar dan mendesain sistem yang baik secara default. Re-entrancy, executor cost, dan priority inversion adalah detail implementasi yang harus diketahui untuk debugging production, bukan untuk arsitektur sehari-hari. Mulai dari pattern di Bagian 16, perdalam ke topik teori saat menemui bug yang spesifik.