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 await dalam method actor, apakah invariant state masih valid?
  • Apakah @unchecked Sendable punya synchronization (lock/atomic) di dalamnya?
  • Apakah MainActor.run bisa diganti MainActor.assumeIsolated?
  • Apakah ada loop yang await actor 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 @Sendable capture mutable state?

Apa yang Harus Dipelajari Selanjutnya

  1. swift-async-algorithms.md — operator pipeline untuk AsyncSequence yang sering bertemu dengan isolation.
  2. swift6-synchronization.mdMutex/Atomic untuk kasus low-level di mana actor terlalu mahal.
  3. 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:

  1. Actor = state + serial executor (bukan mutex).
  2. MainActor = global actor dengan executor main thread.
  3. Sendable = compile-time guarantee untuk cross-isolation transfer.
  4. 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.