Junior — Middle
როგორ ხორციელდება ურთიერთქმედება ბუფერულ არხის მეშვეობით და როგორ ხდება მონაცემების გადაცემა?
sobes.tech AI
პასუხი AI-სგან
Go-да, ბუფერული არხი შექმნილია მისი ზომის მითითებით, მაგალითად: ch := make(chan int, 3). ასეთი არხი შეიძლება შეინახოს մինչև 3 ელემენტი, არ ბლოკავს გამგზავნელს.
ბუფერული არხის მეშვეობით მონაცემების გადაცემა:
- გამგზავნი (
chan <- value) სვამს მნიშვნელობას არხის ბუფერში. თუ ბუფერი არ არის სავსე, ოპერაცია არ ბლოკავს. - თუ ბუფერი სავსეა, გამგზავნი ბლოკდება მანამდე, სანამ ადგილი არ გათავისუფლდება.
- მიმღები (
value := <- chan) იღებს მნიშვნელობას ბუფერიდან. თუ ბუფერი ცარიელია, მიმღები ბლოკდება მონაცემების მოსვლისამდე.
მაგალითი:
ch := make(chan int, 2)
ch <- 1 // არ ბლოკავს, ბუფერში 1 ელემენტი
ch <- 2 // არ ბლოკავს, ბუფერში 2 ელემენტი (სავსე ბუფერი)
fmt.Println(<-ch) // გამოიტანს 1, გაათავისუფლებს ადგილს ბუფერში
ch <- 3 // ახლა შეიძლება გამოგზავნა, რადგან ადგილი არსებობს
ამგვარად, ბუფერული არხები საშუალებას აძლევს დროებით მონაცემების შენახვას და ამცირებს ბლოკირებას გორუტინებს შორის.