GoDasturchi
Channel Pipelines: Composing Concurrent Stages

Channel Pipelines: Composing Concurrent Stages

Kanal pipeline'lari: concurrent bosqichlarni birlashtirish

Channels darsida bitta goroutina natijalarni bitta kanalga yubordi. Endi bir qadam oldinga: bir nechta bosqichni zanjirlab, har birining chiqishi keyingisining kirishi bo'ladigan pipeline qurish mumkin — bu YAML Data Pipeline kursidagi funksiyalarni ketma-ket chaqirish g'oyasining concurrent versiyasi, faqat endi har bir bosqich o'z goroutinasida mustaqil ishlaydi.

example.go
func Generate(nums []int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for _, n := range nums {
            out <- n
        }
    }()
    return out
}

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

// birlashtirish: Square(Generate(nums))

Har bir funksiya <-chan int (faqat-qabul qilish kanali) qaytaradi — bu Channel Directions darsida ko'rasiz turdagi cheklovning tabiiy qo'llanilishi. Square(Generate(nums)) yozilganda, ikkita mustaqil goroutina bir vaqtda ishlaydi: biri sonlarni yaratadi, ikkinchisi ularni darhol kvadratga oshiradi — natijalar tayyor bo'lishi bilanoq keyingi bosqichga oqib boradi.

>_ Exercise

Generate(nums []int) <-chan int funksiyasini yozing — u yangi kanal ochib, alohida goroutinada numsdagi har bir sonni kanalga yuboradi va yopadi, kanalni qaytaradi. Square(in <-chan int) <-chan int funksiyasini yozing — u indan har bir sonni o'qib, uning kvadratini yangi chiqish kanaliga yuboradi va yopadi. mainda ikkalasini Square(Generate(nums)) sifatida birlashtiring.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Har bir bosqichni "kanal qabul qiladi, kanal qaytaradi" shaklida yozib, mustaqil goroutinalarni bir-biriga ulash mumkin — bu pipeline naqshi. Har bir bosqich o'z ishini bajarayotganda, boshqa bosqichlar allaqachon keyingi ma'lumot ustida ishlayotgan bo'ladi.

NEXT UP

Channel Directions: Type-Safe Communication

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Channel Pipelines: Composing Concurrent Stages

Kanal pipeline'lari: concurrent bosqichlarni birlashtirish

Channels darsida bitta goroutina natijalarni bitta kanalga yubordi. Endi bir qadam oldinga: bir nechta bosqichni zanjirlab, har birining chiqishi keyingisining kirishi bo'ladigan pipeline qurish mumkin — bu YAML Data Pipeline kursidagi funksiyalarni ketma-ket chaqirish g'oyasining concurrent versiyasi, faqat endi har bir bosqich o'z goroutinasida mustaqil ishlaydi.

example.go
func Generate(nums []int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for _, n := range nums {
            out <- n
        }
    }()
    return out
}

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

// birlashtirish: Square(Generate(nums))

Har bir funksiya <-chan int (faqat-qabul qilish kanali) qaytaradi — bu Channel Directions darsida ko'rasiz turdagi cheklovning tabiiy qo'llanilishi. Square(Generate(nums)) yozilganda, ikkita mustaqil goroutina bir vaqtda ishlaydi: biri sonlarni yaratadi, ikkinchisi ularni darhol kvadratga oshiradi — natijalar tayyor bo'lishi bilanoq keyingi bosqichga oqib boradi.

>_ Exercise

Generate(nums []int) <-chan int funksiyasini yozing — u yangi kanal ochib, alohida goroutinada numsdagi har bir sonni kanalga yuboradi va yopadi, kanalni qaytaradi. Square(in <-chan int) <-chan int funksiyasini yozing — u indan har bir sonni o'qib, uning kvadratini yangi chiqish kanaliga yuboradi va yopadi. mainda ikkalasini Square(Generate(nums)) sifatida birlashtiring.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Har bir bosqichni "kanal qabul qiladi, kanal qaytaradi" shaklida yozib, mustaqil goroutinalarni bir-biriga ulash mumkin — bu pipeline naqshi. Har bir bosqich o'z ishini bajarayotganda, boshqa bosqichlar allaqachon keyingi ma'lumot ustida ishlayotgan bo'ladi.

NEXT UP

Channel Directions: Type-Safe Communication