Sobes.tech
Junior — Middle

Quelle est la différence entre un canal avec tampon et un canal sans tampon dans le contexte de l'interaction entre goroutines?

sobes.tech IA

Réponse de l'IA

Un canal sans tampon (canal non-buffered) bloque l'expéditeur jusqu'à ce que le récepteur lise la valeur, et vice versa — le récepteur se bloque jusqu'à ce qu'une valeur apparaisse. Cela assure la synchronisation entre les goroutines.

Un canal avec tampon (canal tamponné) possède un tampon interne de taille fixe. L'expéditeur peut envoyer plusieurs valeurs consécutives sans se bloquer, jusqu'à ce que le tampon soit plein. Le récepteur peut lire les valeurs du tampon sans attendre l'expéditeur, si le tampon n'est pas vide.

Exemple:

ch := make(chan int)        // sans tampon
chBuf := make(chan int, 2)  // avec tampon de 2 éléments

// ch <- 1  // se bloquera s'il n'y a pas de récepteur
chBuf <- 1 // ne se bloquera pas tant que le tampon n'est pas plein

Ainsi, les canaux tamponnés permettent une gestion plus flexible de la synchronisation et peuvent améliorer la performance en réduisant le nombre de blocages.