Junior — Middle
Wat is het verschil tussen een gebufferde en een ongebufferde kanaal in de context van interactie tussen goroutines?
sobes.tech AI
Antwoord van AI
Een kanaal zonder buffer (unbuffered channel) blokkeert de zender totdat de ontvanger de waarde leest, en vice versa — de ontvanger wordt geblokkeerd totdat een waarde verschijnt. Dit zorgt voor synchronisatie tussen goroutines.
Een kanaal met buffer (gebufferde kanaal) heeft een interne buffer van vaste grootte. De zender kan meerdere waarden achter elkaar sturen zonder te blokkeren, totdat de buffer vol is. De ontvanger kan waarden uit de buffer lezen zonder op de zender te wachten, als de buffer niet leeg is.
Voorbeeld:
ch := make(chan int) // zonder buffer
chBuf := make(chan int, 2) // met buffer van 2 elementen
// ch <- 1 // wordt geblokkeerd als er geen ontvanger is
chBuf <- 1 // wordt niet geblokkeerd zolang de buffer niet vol is
Op deze manier maken gebufferde kanalen het beheer van synchronisatie flexibeler en kunnen ze de prestaties verbeteren door het aantal blokkades te verminderen.