Sobes.tech
Junior — Middle

Агар дар вақти сохтани канал дар система дарозии онро муайян накунед, чӣ мешавад?

sobes.tech AI

Ҷавоб аз AI

თუ Go-ში არხის შექმნისას მისი სიგრძე არ მითითდება, მაშინ ქმნიან არაბუფერიან (unbuffered) არხს. ამ ტიპის არხს აქვს შემდეგი მახასიათებლები:

  • გაგზავნა (chan <-) ბლოკდება, სანამ სხვა goroutine-ი არ წაიკითხავს მნიშვნელობას არხიდან.
  • მიღება (<- chan) ბლოკდება, სანამ არხში არ იქნება გაგზავნილი მნიშვნელობა.

ეს ნიშნავს, რომ გაგზავნის და მიღების ოპერაციები პირდაპირ სინქრონიზდებიან goroutine-ებს შორის, უზრუნველყოფენ მკაცრ სინქრონიზაციას.

არაბუფერიანი არხის შექმნის მაგალითი:

ch := make(chan int) // სიგრძე არ არის მითითებული, არაბუფერიანი არხი

// გაგზავნა და მიღება ბლოკდება სინქრონიზაციისთვის

თუ სჭირდება ასინქრონული გაგზავნა ბლოკირების გარეშე, უნდა მითითდეს ბუფერის სიგრძე, მაგალითად:

ch := make(chan int, 10) // 10 ელემენტის ბუფერი

შეჯამებით, არხის შექმნისას სიგრძის არ მითითება ნიშნავს, რომ არხი მუშაობს სინქრონულ რეჟიმში.