"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 obtenir une communication asynchrone avec la disponibilité des canaux en Go tout en minimisant l'utilisation du processeur ?

Comment obtenir une communication asynchrone avec la disponibilité des canaux en Go tout en minimisant l'utilisation du processeur ?

Publié le 2024-11-19
Parcourir:271

How to Achieve Asynchronous Communication with Channel Readiness in Go While Minimizing CPU Utilization?

Communication asynchrone avec préparation des canaux

Dans Go, les canaux facilitent la communication simultanée entre les goroutines. Lorsqu'il s'agit de canaux d'envoi tamponnés et de canaux de réception non tamponnés, il est possible de sélectionner simultanément les deux canaux pour optimiser le flux de communication. Cet article explore l'approche permettant d'implémenter cette fonctionnalité tout en minimisant l'utilisation du processeur.

Pour comprendre le problème, considérez le contexte suivant :

s := make(chan

La question se pose de savoir s'il est possible de sélectionner sur les deux canaux de telle sorte que r soit sélectionné lorsque les données sont disponibles en lecture, et s soit sélectionné lorsque le canal n'est pas plein.

Solution

On peut y parvenir en utilisant une instruction select avec un cas par défaut. Étant donné que la valeur à envoyer n'est évaluée qu'une seule fois lors de l'utilisation de select, si les deux canaux ne sont pas prêts, la valeur devient obsolète. Pour éviter cela, un cas par défaut est ajouté à l'instruction de sélection, qui est exécutée si aucun des deux canaux n'est prêt. Dans ce cas par défaut, le programme se met en veille pendant une courte durée, permettant aux canaux d'être prêts, puis réessaye avec une valeur mise à jour.

s := make(chan

Avertissement

L'utilisation de len(r) ou de cap(s) pour vérifier l'état de préparation du canal, puis l'envoi/la réception n'est pas recommandée car le canal peut changer d'état entre le chèque et la tentative d'envoi/réception.

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