Les canaux tamponnés maintiennent-ils l'ordre ?
Dans Go, les canaux tamponnés ne maintiennent aucune garantie d'ordre. Cela signifie que les données peuvent être lues à partir du canal dans un ordre différent de celui dans lequel elles ont été écrites.
Cependant, s'il n'y a qu'un seul producteur (la goroutine qui écrit sur le canal) et un seul consommateur (la goroutine qui lit du canal), l'ordre des données sera conservé dans les canaux tamponnés et non tamponnés. En effet, le producteur écrira toujours sur la chaîne dans le même ordre et le consommateur lira toujours sur la chaîne dans le même ordre.
L'ordre des opérations de lecture/écriture est illustré dans The Nature Of Channels. Dans Go de William Kennedy. Il montre comment l'ordre de lecture/écriture est respecté dans les canaux tamponnés et non tamponnés.
Pour les canaux non tamponnés, l'ordre des données est garanti car l'expéditeur bloque jusqu'à ce que le récepteur ait reçu la valeur.
Pour les canaux mis en mémoire tampon, l'expéditeur bloque uniquement jusqu'à ce que la valeur ait été copiée dans le tampon. Si le tampon est plein, l'expéditeur bloquera jusqu'à ce qu'un destinataire ait récupéré une valeur. Cela signifie que l'ordre des données n'est pas garanti, mais la livraison est garantie tant que le tampon n'est pas plein.
William Kennedy explique plus en détail l'aspect garantie de livraison dans The Behaviour Of Channels. Il décrit trois options de canal : sans tampon, tamponné >1 et tamponné =1.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!