Sobes.tech
Junior — Middle

შესაძლებელია ერთდროულად რამდენიმე goroutine-დან მიიღოთ მნიშვნელობები ერთ არხიდან?

sobes.tech AI

პასუხი AI-სგან

დიახ, რამდენიმე goroutine ერთდროულად შეუძლია მიიღოს მნიშვნელობები ერთ არხიდან Go-ში. არხები in Go-ს მხარდაჭერა აქვს მრავალჯერად წაკითხვასა და დაწერას, რაც საშუალებას აძლევს რამდენიმე goroutine-ს ერთდროულად წაიკითხოს ერთ არხიდან.

თუმცა, მნიშვნელოვანია აღინიშნოს, რომ თუ რამდენიმე goroutine წაიკითხავს ერთ არხიდან, თითოეული მნიშვნელობა მიიღება მხოლოდ ერთ მათგანზე — მნიშვნელობები არ იწერება ორჯერ. ეს სასარგებლოა სამუშაოს განაწილებისთვის goroutine-ებს შორის (მუშაკების პული).

მაგალითი:

ch := make(chan int)

// რამდენიმე goroutine-ის დაწყება, რომლებიც წაიკითხავენ არხიდან
for i := 0; i < 3; i++ {
    go func(id int) {
        for val := range ch {
            fmt.Printf("Goroutine %d მიიღო %d\n", id, val)
        }
    }(i)
}

// მონაცემების გაგზავნა არხზე
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

ამ მაგალითში, არხიდან მიღებული მნიშვნელობები ნაწილდება სამ goroutine-ებს შორის.