Sobes.tech
Junior — Middle

არის დაშვებული ერთ არხზე ერთდროულად რამდენიმე გორუტინით შეტყობინებების გაგზავნა?

sobes.tech AI

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

დიახ, Go-ში ნებადართულია ერთდროულად რამდენიმე goroutine-დან შეტყობინებების გაგზავნა ერთ არხზე. Go-ის არხები უსაფრთხოა თრედისათვის და უზრუნველყოფს სინქრონიზაციას goroutine-ებს შორის.

თუმცა, მნიშვნელოვანია გახსოვდეთ:

  • თუ რამდენიმე goroutine ერთ არხზე წერს და არავინ კითხულობს, ეს გამოიწვევს ბლოკირებას.
  • თუ არხი ბუფერულია, ჩანაწერები ბლოკდება მხოლოდ მაშინ, როდესაც ბუფერი სავსეა.
  • საჭიროა ყურადღებით მართოთ არხის დახურვა: მხოლოდ გამგზავნი უნდა დახუროს ის, და მხოლოდ მაშინ, როდესაც დარწმუნებულია, რომ მეტი ჩანაწერი არ იქნება.

მაგალითი:

ch := make(chan int)

// რამდენიმე goroutine-ის გაშვება, რომლებიც აგზავნიან მონაცემებს არხზე
for i := 0; i < 3; i++ {
    go func(id int) {
        ch <- id
    }(i)
}

// კითხვა არხიდან
for i := 0; i < 3; i++ {
    fmt.Println(<-ch)
}

ამგვარად, ერთდროულად გაგზავნა არხზე რამდენიმე goroutine-დან — სტანდარტული პრაქტიკაა Go-ში.