0Pricing
Go Academy · Ders

Fan-in ve Fan-out Örüntüleri

Birden çok kanalı birleştirme ve işi dağıtma

Fan-in ve Fan-out Örüntüleri, CoddyKit'te ücretsiz bir Go 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, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

İş Dağıtma Nedir?

İş dağıtma, işi bir kanaldan birden fazla eşzamanlı rutine dağıtarak paralel işlemeye olanak tanır. Her işçi aynı giriş kanalından alır.

İş Dağıtma Örneği

Paylaşılan bir işler kanalından okuyan N işçi başlatın:

func fanOut(jobs <-chan Job, n int) {
    for i := 0; i < n; i++ {
        go func() {
            for job := range jobs {
                process(job)
            }
        }()
    }
}

İş Birleştirme Nedir?

İş birleştirme, birden fazla kanalı tek kanalda birleştirerek tek bir tüketicinin birçok üreticiden gelen sonuçları okuyabilmesini sağlar.

Eşzamanlı Rutinlerle İş Birleştirme

Her giriş kanalı için bir eşzamanlı rutin başlatın; her eşzamanlı rutin değerleri paylaşılan bir çıkış kanalına iletsin.

func fanIn(cs ...<-chan int) <-chan int {
    out := make(chan int)
    var wg sync.WaitGroup
    for _, c := range cs {
        wg.Add(1)
        go func(ch <-chan int) {
            defer wg.Done()
            for v := range ch { out <- v }
        }(c)
    }
    go func() { wg.Wait(); close(out) }()
    return out
}

Seçim İfadesiyle İş Birleştirme

Sabit sayıda giriş kanalı için seçim döngüsü, kanal başına eşzamanlı rutin kullanmaktan daha basittir.

func merge(a, b <-chan int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for a != nil || b != nil {
            select {
            case v, ok := <-a: if !ok { a = nil } else { out <- v }
            case v, ok := <-b: if !ok { b = nil } else { out <- v }
            }
        }
    }()
    return out
}

İşlem Hattı Aşaması

Bir işlem hattı aşaması oluşturmak için iş dağıtma ve iş birleştirmeyi bir araya getirin: bir giriş kanalı, N paralel işçi ve birleştirilmiş bir çıkış kanalı.

func parallelStage(in <-chan Work, n int) <-chan Result {
    outs := make([]<-chan Result, n)
    for i := 0; i < n; i++ {
        outs[i] = worker(in)
    }
    return fanIn(outs...)
}

Kanalları Temiz Biçimde Kapatma

Kanalı gönderici kapatır; alıcı kapanmayı iki değerli alma biçimiyle veya aralık üzerinden dolaşarak algılar. Alıcı tarafında asla kapatmayın.

for v := range in { // exits when in is closed
    process(v)
}

WaitGroup ile Eşgüdüm

Tüm iş dağıtma işçilerinin ne zaman tamamlandığını öğrenmek için sync.WaitGroup kullanın; ardından aşağı akıştaki tüketicilerin tamamlanabilmesi için çıkış kanalını kapatın.

Geri Basınç

Yoğunluk artışlarını karşılamak için işlem hattı aşamaları arasında arabellekli kanallar kullanın. Arabellek boyutunu, üretici ile tüketici arasındaki beklenen gecikme farkına göre belirleyin.

out := make(chan Result, 100) // buffer absorbs bursts

Hataların İletilmesi

Sonuçları hem değeri hem de hatayı taşıyan bir yapı içinde paketleyin; böylece hatalar panik oluşturmadan verilerle birlikte işlem hattından akar.

type Result struct {
    Value int
    Err   error
}

Bağlam İptali

Bir bağlamı işlem hattı aşamalarından geçirin ve iptal edildiğinde tüm işlem hattının durması için her aşamada ctx.Done() denetimi yapın.

case <-ctx.Done():
    return ctx.Err()

Hızlı Kontrol

Bir iş birleştirme kalıbında birleştirilmiş çıkış kanalını ne kapatır?

Özet: İş Birleştirme ve İş Dağıtma

Temel noktalar:

  • İş dağıtma: Birden fazla işçi tek kanaldan okur
  • İş birleştirme: Kaynak başına bir eşzamanlı rutin, kaynakları tek çıkış kanalında birleştirir
  • WaitGroup, birleştirilmiş kanalın kapatılmasını eşgüdümler
  • İptal için bağlam, geri basınç için arabellekli kanallar kullanın

Sıkça Sorulan Sorular

“Fan-in ve Fan-out Örüntüleri” dersi ücretsiz mi?

Evet — “Fan-in ve Fan-out Örüntüleri” 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 Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Fan-in ve Fan-out Örüntüleri” dersinde ne öğreneceğim?

Birden çok kanalı birleştirme ve işi dağıtma Go 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.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go 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.

“Fan-in ve Fan-out Örüntüleri” 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 Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go 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. select Deyimi
  2. Zaman Aşımları ve Zamanlayıcılar
  3. Fan-in ve Fan-out Örüntüleri
  4. İşçi Havuzu Örüntüsü
← Go Academy Sayfasına Dön