Maison > développement back-end > Golang > Les canaux tamponnés garantissent-ils l'ordre des données ?

Les canaux tamponnés garantissent-ils l'ordre des données ?

Susan Sarandon
Libérer: 2024-12-30 12:50:11
original
518 Les gens l'ont consulté

Do Buffered Channels Guarantee Order of Data?

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.

  • Les canaux sans tampon offrent une garantie qu'un signal envoyé a été reçu.
  • Canaux tamponnés avec un une taille supérieure à 1 n'offre aucune garantie de réception du signal.
  • Les canaux tamponnés d'une taille de 1 offrent une garantie retardée. Il est garanti que le premier signal envoyé sera reçu avant que le deuxième signal puisse être envoyé.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal