Go Academy · Ders

İşlem Hattı Aşamaları

Kanal aşamalarını zincirleyin

3. ders / 413 adım

İşlem Hattı Aşamaları, 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.

İşlem Hattı Nedir

İşlem hattı, kanallarla birbirine bağlanan stage'ler dizisidir. Her stage değerleri alır, işlem yapar ve sonuçları aşağı akışa gönderir. Veriler bir montaj hattındaki gibi akar.

  • Her stage bir gorutindir
  • stage'ler yalnızca kanallar üzerinden iletişim kurar
  • Birleştirilebilir ve anlaşılması kolaydır

stage İmzası Kuralı

Kurala göre her stage, bir veya daha fazla yalnızca alıcı girdi kanalı alır ve yalnızca alıcı bir çıktı kanalı döndürür. Bu, stage'lerin zincirlenebilmesini sağlar.

func stage(in <-chan int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for v := range in {
            out <- v
        }
    }()
    return out
}

Kaynak stage'i

İlk stage verileri üretir. Genellikle bir dilim veya değişken sayıda bağımsız değişken alır ve bunları bir kanala akıtır.

func numbers(vals ...int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for _, v := range vals {
            out <- v
        }
    }()
    return out
}

Bir Dönüştürme stage'i

Bu stage her değeri on ile çarpar. in kanalından okur ve dönüştürülmüş değeri out kanalına yazar.

func tenfold(in <-chan int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for v := range in {
            out <- v * 10
        }
    }()
    return out
}

Bir Filtre stage'i

Filtre, yalnızca bir koşulu karşılayan değerleri iletir. Burada çift sayıları koruyup geri kalanları eliyoruz.

func evens(in <-chan int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for v := range in {
            if v%2 == 0 {
                out <- v
            }
        }
    }()
    return out
}

stage'leri Zincirleme

Bir çıktıyı sonraki girdiye geçirerek stage'leri birleştirin. Zincir, neredeyse bir cümle gibi okunur.

pipe := tenfold(evens(numbers(1, 2, 3, 4)))
for v := range pipe {
    fmt.Println(v)
}

defer close(out)

defer close(out) kullanmak, daha sonra erken dönüşler ekleseniz bile stage gorutini döndüğünde çıktı kanalının kapanmasını garanti eder. Bu, akış sonu sinyalini aşağı akışa iletir.

Eksiksiz Bir İşlem Hattı

Önce kaynak, sonra filtre, ardından dönüştürme. Yalnızca çift girdilerin on katını görmek için çalıştırın.

package main

import "fmt"

func numbers(vals ...int) <-chan int {
    out := make(chan int)
    go func() { defer close(out); for _, v := range vals { out <- v } }()
    return out
}

func evens(in <-chan int) <-chan int {
    out := make(chan int)
    go func() { defer close(out); for v := range in { if v%2 == 0 { out <- v } } }()
    return out
}

func tenfold(in <-chan int) <-chan int {
    out := make(chan int)
    go func() { defer close(out); for v := range in { out <- v * 10 } }()
    return out
}

func main() {
    for v := range tenfold(evens(numbers(1, 2, 3, 4, 5, 6))) {
        fmt.Println(v)
    }
}

Gruplama Değil, Akış

Değerler üretildikçe işlem hattından birer birer akar. Dönüştürme stage'i, kaynak son öğeyi göndermeden önce ilk öğe üzerinde çalışmaya başlayabilir. Bu, belleği düşük ve gecikmeyi küçük tutar.

İşlem Hatları Tembel Çalışır

Bir stage, çıktısından biri okuma yapana kadar hiçbir iş yapmaz. Tüketici aralık üzerinden okumayı durdurursa, yukarı akıştaki stage'ler gönderme işlemlerinde engellenir. Bu doğal geri basınç, boşa hesaplama yapılmasını önler.

Eşzamanlılık Ekleme

Yavaş bir stage'i hızlandırmak için aynı girdiyi okuyan birden çok örneğe dağıtın ve çıktıları birleştirin. stage imzası aynı kalır; yalnızca bağlantı şekli değişir.

Hızlı Kontrol

İşlem hatları konusundaki bilginizi test edin.

Özet

İşlem hattı stage'lerini öğrendiniz:

  • Her stage: yalnızca alıcı girdi alır, yalnızca alıcı çıktı döndürür
  • defer close(out), akış sonunu iletir
  • Çağrıları iç içe yerleştirerek stage'leri zincirleyin
  • İşlem hatları geri basınçla tembel biçimde akış sağlar
Başlamak ücretsiz

Yapay zeka eğitmeniyle Go öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“İşlem Hattı Aşamaları” dersi ücretsiz mi?

Evet — “İşlem Hattı Aşamaları” 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.

“İşlem Hattı Aşamaları” dersinde ne öğreneceğim?

Kanal aşamalarını zincirleyin 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.

“İşlem Hattı Aşamaları” 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. Çalışan Havuzu Örüntüsü
  2. Fan-Out Fan-In
  3. İşlem Hattı Aşamaları
  4. Zarif Kapatma
← Go Academy Sayfasına Dön