Junior
Wat is het verschil tussen gebufferde en niet-gebufferde kanalen in Go?
sobes.tech AI
Antwoord van AI
Niet-gebufferde kanalen vereisen dat het verzenden en ontvangen van gegevens synchroon plaatsvinden. De zender wordt geblokkeerd totdat de ontvanger klaar is om de gegevens te accepteren, en vice versa. Hun buffer grootte is nul.
Gebufferde kanalen hebben een eindige buffer grootte. De zender wordt alleen geblokkeerd als de buffer vol is, en de ontvanger als de buffer leeg is.
// Niet-gebufferde kanaal
unbufferedChan := make(chan int)
// Gebufferde kanaal met buffer grootte 5
bufferedChan := make(chan int, 5)
| Kenmerk | Niet-gebufferde kanaal | Gebufferde kanaal |
|---|---|---|
| Buffer grootte | 0 | > 0 |
| Synchronisatie | Synchrone interactie | Asynchroon als buffer niet vol/leeg is |
| Blokkering van de zender | Totdat de ontvanger ontvangt | Totdat de buffer vol is |
| Blokkering van de ontvanger | Totdat de zender verzendt | Totdat de buffer leegt |
Niet-gebufferde kanalen worden gebruikt voor het synchroniseren van goroutines en om te zorgen dat berichten niet verloren gaan. Gebufferde kanalen worden gebruikt om blokkades te verminderen, waardoor de zender kan doorgaan met werken terwijl de ontvanger nog niet klaar is, of vice versa.