Sobes.tech
Junior — Middle

ჩანართიდან კითხვა ოპერაცია ბუფერის გამოყენების გარეშე შესაძლებელია?

sobes.tech AI

პასუხი AI-სგან

Go-ში, სარკინიგზო (chan) არხიდან წაკითხვა ბუფერის გარეშე შესაძლებელია მხოლოდ მაშინ, როდესაც არხი ბუფერულია. თუ არხს ბუფერი არ აქვს (ზომა 0), წაკითხვა ბლოკდება მანამ, სანამ არხში მნიშვნელობა არ გაიგზავნება.

ამიტომ:

  • ბუფერული არ არის, ბლოკირებადი წაკითხვისთვის, საჭიროა ბლოკირებადი არ არის ოპერაციების გამოყენება არხთან (მაგალითად, select-ის საშუალებით default-თან), მაგრამ ეს არ გარანტირებს მონაცემების მიღებას.
  • თუ არხი ბუფერული არ არის, წაკითხვა ყოველთვის ბლოკდება, სანამ ვინმე მონაცემს არ გაგზავნის.

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

ch := make(chan int, 1) // ბუფერი 1 ელემენტისთვის
ch <- 42                // მნიშვნელობის გაგზავნა
val := <-ch             // ბლოკირების გარეშე წაკითხვა

თუ არხს ბუფერი არ აქვს, წაკითხვა და დაწერა პირდაპირ სინქრონიზდება გორუტინებს შორის.