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-ში.