Sobes.tech
Junior — Middle

Деректерді беру үшін буферленген арна қолданылатын сценарийдің мысалын келтіре аласыз ба?

sobes.tech AI

AI-дан жауап

Go тілінде буферленген арна — бұл деректерді горутиндер арасында жіберу кезінде қолданылатын құрал, ол жіберушіні дереу блоктамай, ал қабылдаушы дайын болмаса да, деректерді қабылдауға мүмкіндік береді. Мысалы, деректерді өндіруші тезірек генерациялайтын сценарийлерде, буферленген арна бірнеше элементті жинақтауға мүмкіндік береді, бұл өндірушіні күттірмейді.

Мысал:

package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan int, 3) // 3 элементтік буфер

    // Өндіруші
    go func() {
        for i := 1; i <= 5; i++ {
            fmt.Printf("Жіберу: %d\n", i)
            ch <- i // буфер толмаған кезде блоктамайды
        }
        close(ch)
    }()

    // Тұтынушы
    time.Sleep(time.Second) // кідірісті имитациялау
    for val := range ch {
        fmt.Printf("Алынды: %d\n", val)
        time.Sleep(500 * time.Millisecond) // баяу өңдеу
    }
}

Бұл мысалда өндіруші буфердегі алғашқы 3 мәнді жіберіп, блокталмайды, ал кейін тұтынушы бос орын босатқанша күтеді.