Sobes.tech
Junior

Quelle est la différence entre les canaux tamponnés et non tamponnés en Go?

sobes.tech IA

Réponse de l'IA

Les canaux non tamponnés nécessitent que l’envoi et la réception des données se produisent de manière synchrone. L’expéditeur est bloqué jusqu’à ce que le récepteur soit prêt à accepter les données, et vice versa. Leur taille de tampon est nulle.

Les canaux tamponnés ont une taille de tampon finie. L’expéditeur est bloqué uniquement si le tampon est plein, et le récepteur si le tampon est vide.

// Canal non tamponné
unbufferedChan := make(chan int)

// Canal tamponné avec une taille de tampon de 5
bufferedChan := make(chan int, 5)
Caractéristique Canal non tamponné Canal tamponné
Taille du tampon 0 > 0
Synchronisation Interaction synchrone Asynchrone si le tampon n’est pas plein/vide
Blocage de l’expéditeur Jusqu’à ce que le récepteur reçoive Jusqu’à ce que le tampon soit plein
Blocage du récepteur Jusqu’à ce que l’expéditeur envoie Jusqu’à ce que le tampon soit vidé

Les canaux non tamponnés sont utilisés pour synchroniser les goroutines et assurer que les messages ne soient pas perdus. Les canaux tamponnés sont utilisés pour réduire les blocages, permettant à l’expéditeur de continuer à travailler pendant que le récepteur n’est pas encore prêt, ou vice versa.