Junior — Middle
Агар дар вақти сохтани канал дар система дарозии онро муайян накунед, чӣ мешавад?
sobes.tech AI
Ҷавоб аз AI
თუ Go-ში არხის შექმნისას მისი სიგრძე არ მითითდება, მაშინ ქმნიან არაბუფერიან (unbuffered) არხს. ამ ტიპის არხს აქვს შემდეგი მახასიათებლები:
- გაგზავნა (
chan <-) ბლოკდება, სანამ სხვა goroutine-ი არ წაიკითხავს მნიშვნელობას არხიდან. - მიღება (
<- chan) ბლოკდება, სანამ არხში არ იქნება გაგზავნილი მნიშვნელობა.
ეს ნიშნავს, რომ გაგზავნის და მიღების ოპერაციები პირდაპირ სინქრონიზდებიან goroutine-ებს შორის, უზრუნველყოფენ მკაცრ სინქრონიზაციას.
არაბუფერიანი არხის შექმნის მაგალითი:
ch := make(chan int) // სიგრძე არ არის მითითებული, არაბუფერიანი არხი
// გაგზავნა და მიღება ბლოკდება სინქრონიზაციისთვის
თუ სჭირდება ასინქრონული გაგზავნა ბლოკირების გარეშე, უნდა მითითდეს ბუფერის სიგრძე, მაგალითად:
ch := make(chan int, 10) // 10 ელემენტის ბუფერი
შეჯამებით, არხის შექმნისას სიგრძის არ მითითება ნიშნავს, რომ არხი მუშაობს სინქრონულ რეჟიმში.