Sobes.tech
Junior — Middle

Kokiose sąlygose įvyksta blokavimas naudojant buferinį kanalą duomenų perdavimo sistemoje?

sobes.tech AI

Atsakymas iš AI

Go kalne, turintis buferį, užstringa dviejose pagrindinėse situacijose:

  1. Rašant (siunčiant) į kanalą: jei kanalo buferis yra pilnas (t.y., elementų skaičius kanale pasiekė jo talpą), bandymas siųsti naują reikšmę blokuoja goroutine, kol kas nors neskaito iš kanalo ir neužleidžia vietos.

  2. Skaitant iš kanalo: jei kanalas yra tuščias (nėra elementų skaityti), bandymas skaityti iš kanalo blokuoja goroutine, kol kas nors nesiųs naujos reikšmės.

Taigi, užstringa bandant siųsti duomenis į pilną buferį arba skaityti iš tuščio buferio.