Sobes.tech
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 // ახლა შეიძლება გამოგზავნა, რადგან ადგილი არსებობს

ამგვარად, ბუფერული არხები საშუალებას აძლევს დროებით მონაცემების შენახვას და ამცირებს ბლოკირებას გორუტინებს შორის.