0Pricing
Swift Academy · Ders

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

  1. Veri Yarışı Sorunu
  2. Sendable Protokolü
  3. Actor Yalıtımı ve nonisolated
  4. Katı Eşzamanlılığa Geçiş
← Swift Academy Sayfasına Dön