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.