Junior — Middle
V čom sa líši kanál s vyrovnávacou pamäťou od kanála bez nej v kontexte interakcie medzi gorutinami?
sobes.tech AI
Odpoveď od AI
Kanál bez vyrovnávacej pamäte (unbuffered channel) blokuje odosielateľa, kým príjemca ne prečíta hodnotu, a naopak — príjemca je blokovaný, kým sa neobjaví hodnota. To zabezpečuje synchronizáciu medzi gorutinami.
Kanál s vyrovnávacou pamäťou (bufferovaný kanál) má vnútornú pamäť pevnej veľkosti. Odosielateľ môže poslať niekoľko hodnôt za sebou bez blokovania, kým sa pamäť nezaplní. Príjemca môže čítať hodnoty z pamäti bez čakania na odosielateľa, ak pamäť nie je prázdna.
Príklad:
ch := make(chan int) // bez vyrovnávacej pamäti
chBuf := make(chan int, 2) // s vyrovnávacou pamäťou na 2 prvky
// ch <- 1 // zablokuje sa, ak nie je príjemca
chBuf <- 1 // nebude sa blokovať, kým sa pamäť nezaplní
Týmto spôsobom umožňujú vyrovnávacie kanály flexibilnejšie riadenie synchronizácie a môžu zvýšiť výkon znížením počtu blokovaní.