"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment sélectionner simultanément un canal d'envoi avec tampon et un canal de réception sans tampon dans Go ?

Comment sélectionner simultanément un canal d'envoi avec tampon et un canal de réception sans tampon dans Go ?

Publié le 2024-11-06
Parcourir:792

How to Select on a Buffered Send and Unbuffered Receive Channel Simultaneously in Go?

Sélectionner simultanément un canal d'envoi et de réception en Go

En Go, il est possible d'effectuer des opérations d'E/S non bloquantes sur les canaux à l'aide de l'instruction select. Cependant, une question courante se pose lorsqu'il s'agit d'un canal d'envoi tamponné (chan

Le problème lié à la vérification de la longueur/capacité des canaux

Une approche courante consiste à vérifier la longueur ou la capacité des canaux avant d'envoyer ou de recevoir. Cependant, cela n'est pas fiable car l'état du canal peut changer entre la vérification et l'opération suivante :

if len(r) > 0 {
    // Optionally execute other code

    r 

La solution : cas par défaut avec délai

Pour résoudre ce problème, vous pouvez utiliser une instruction select avec un cas par défaut qui inclut un court délai. Cela évite une utilisation excessive du processeur tout en vous permettant de réessayer l'opération si les deux canaux ne sont pas prêts :

s := make(chan

En ajoutant le cas par défaut, le programme ne bloquera que pendant une courte période si les deux canaux ne sont pas prêts, permettant ainsi aux ressources CPU d'être libérées en attendant qu'un canal soit disponible.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3