Actor Yalıtımı ve nonisolated
Yalıtım sınırları üzerine akıl yürütün.
Actor Yalıtımı ve nonisolated, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Aktör Yalıtımı Nedir
Aktör yalıtımı, bir aktörün değiştirilebilir durumuna yalnızca o aktör üzerinde çalışan kodun dokunabilmesi anlamına gelir.
Çalışma zamanı erişimi serileştirir; böylece iki görev durumu aynı anda hiçbir zaman değiştiremez ve veri yarışlarını ortadan kaldırır.
actor Counter {
private var value = 0
func increment() { value += 1 }
}Bir Aktöre Çağrı Yapmak
Aktörün dışından yalıtılmış üyelere erişim eşzamansızdır. Çağrı, aktör serbest kalana kadar askıya alınabileceğinden await kullanmanız gerekir.
let counter = Counter()
func useCounter() async {
await counter.increment()
}Aktörün İçinde: Eşzamanlı
Aktörün kendi yöntemleri içinde zaten yalıtılmış durumdasınızdır; bu nedenle duruma eşzamanlı olarak erişirsiniz ve kendiniz için await gerekmez.
actor Counter {
private var value = 0
func incrementTwice() {
value += 1 // synchronous: already isolated
value += 1
}
}Yalıtılmamış Üyeler
Değiştirilebilir duruma dokunmadığında bir üyeyi nonisolated olarak işaretleyin. Bu üyeler her yerden eşzamanlı olarak ve await olmadan çalışır.
Bu, yalnızca değişmez verilerden oluşturulan hesaplanmış değerler için ideal bir çözümdür.
actor User {
let id: Int
var sessionCount = 0
init(id: Int) { self.id = id }
nonisolated var label: String { "User #\(id)" }
}Yalıtılmamış Neden Güvenlidir
nonisolated bir üye yalnızca değişmez (let) veya başka bir deyişle gönderilebilir durumu okuyabilir.
Derleyici, yalıtılmamış bir bağlamdan değiştirilebilir yalıtılmış duruma erişme girişimlerini reddeder.
actor User {
let id: Int
var sessionCount = 0
init(id: Int) { self.id = id }
// Error: cannot read mutable sessionCount here
// nonisolated var bad: Int { sessionCount }
}Yalıtılmamış ve Protokoller
nonisolated, bir aktör eşzamanlı bir protokole uyduğunda zorunludur. Protokol yöntemi eşzamansız olamaz; bu nedenle yalıtılmış durumdan kaçınmalıdır.
actor Item: CustomStringConvertible {
let name: String
init(name: String) { self.name = name }
nonisolated var description: String { "Item: \(name)" }
}MainActor
@MainActor, kodu ana iş parçacığına yalıtan bir genel aktördür. Kullanıcı arayüzü güncellemeleri burada yapılmalıdır.
Türleri, yöntemleri veya özellikleri ana aktöre sabitlemek için bunlara ek açıklama ekleyin.
@MainActor
final class ViewModel {
var title = "Hello"
func refresh() { title = "Updated" }
}Aktörler Arasında Geçiş
Bir aktörden diğerini çağırdığınızda çalışma zamanı yürütücüler arasında geçiş yapar ve çalışmayı askıya alır. await ifadesinin ortaya çıktığı yer tam olarak bu askıya alma noktasıdır.
actor Database { func load() -> Int { 42 } }
@MainActor
func show(_ db: Database) async {
let v = await db.load() // hop to db actor
print(v) // hop back to main
}Aktörlerin Yeniden Girişliliği
Aktörler yeniden girişlidir: bir yöntem bekleme durumundayken aktör, beklemenin devam etmesinden önce sıradaki diğer işleri çalıştırabilir.
await öncesinde okuduğunuz durum, sonrasında değişmiş olabilir. Askıya alma noktalarından sonra varsayımlarınızı yeniden kontrol edin.
actor Store {
var ready = false
func prepare() async {
ready = false
await Task.yield() // other calls may run here
ready = true
}
}Yalıtılmış Parametreler
Bir işlev, isolated bir aktör parametresi alabilir ve üyesi olmadığı hâlde gövdesini o aktör üzerinde çalıştırabilir.
func bump(on counter: isolated Counter) {
// runs isolated to counter; synchronous access
}Alt Sistemler için Genel Aktörler
Bir alt sistemin tamamını (örneğin bir işleme hattını) tek bir yürütücüye yalıtmak için kendi genel aktörünüzü tanımlayabilirsiniz.
@globalActor
actor RenderActor {
static let shared = RenderActor()
}
@RenderActor func draw() { }Kısa Kontrol: Yalıtım
Aktör yalıtımı konusundaki anlayışınızı sınayın.
Özet: Aktör Yalıtımı ve Yalıtılmamış Üyeler
Aktör yalıtımı, değiştirilebilir duruma erişimi serileştirir; aktörler arası çağrılar eşzamansızdır ve await gerektirir. nonisolated üyeler yalıtımın dışına çıkar, ancak yalnızca değişmez veya gönderilebilir durumu okuyabilir; bu, eşzamanlı protokol uyumluluğu için çok önemlidir.
@MainActor kodu ana iş parçacığına sabitler, aktörler yeniden girişlidir (durum await boyunca değişebilir) ve genel aktörler bütün alt sistemleri yalıtır. Bu kurallara hâkim olmak, güvenli eşzamanlılığın temelidir.
Sıkça Sorulan Sorular
“Actor Yalıtımı ve nonisolated” dersi ücretsiz mi?
Evet — “Actor Yalıtımı ve nonisolated” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Actor Yalıtımı ve nonisolated” dersinde ne öğreneceğim?
Yalıtım sınırları üzerine akıl yürütün. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Actor Yalıtımı ve nonisolated” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Veri Yarışı Sorunu
- Sendable Protokolü
- Actor Yalıtımı ve nonisolated
- Katı Eşzamanlılığa Geçiş