Junior — Middle
Was ist der Unterschied zwischen einem Pufferkanal und einem Kanal ohne Puffer im Kontext der Interaktion zwischen Goroutines?
sobes.tech KI
Antwort von AI
Ein unpufferter Kanal (unbuffered channel) blockiert den Sender, bis der Empfänger den Wert liest, und umgekehrt — der Empfänger wird blockiert, bis ein Wert erscheint. Dies sorgt für Synchronisation zwischen Goroutinen.
Ein gepufferter Kanal (buffered channel) hat einen internen Puffer fester Größe. Der Sender kann mehrere Werte hintereinander senden, ohne zu blockieren, bis der Puffer voll ist. Der Empfänger kann Werte aus dem Puffer lesen, ohne auf den Sender zu warten, wenn der Puffer nicht leer ist.
Beispiel:
ch := make(chan int) // ohne Puffer
chBuf := make(chan int, 2) // mit Puffer für 2 Elemente
// ch <- 1 // wird blockieren, wenn kein Empfänger vorhanden ist
chBuf <- 1 // wird nicht blockieren, solange der Puffer nicht voll ist
Auf diese Weise ermöglichen gepufferte Kanäle eine flexiblere Steuerung der Synchronisation und können die Leistung verbessern, indem sie die Anzahl der Blockierungen verringern.