"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 efficacement les canaux d'envoi avec tampon et de réception sans tampon dans Go ?

Comment sélectionner efficacement les canaux d'envoi avec tampon et de réception sans tampon dans Go ?

Publié le 2024-11-20
Parcourir:797

How to Efficiently Select on Buffered Send and Unbuffered Receive Channels in Go?

Go Language : sélection simultanée sur des canaux tamponnés et non tamponnés

La tâche à accomplir consiste à réaliser une sélection simultanée sur un canal d'envoi tamponné et un canal de réception sans tampon sans consommer constamment les ressources du processeur. Ce scénario équivaut à bloquer jusqu'à ce qu'un canal soit prêt à envoyer sans transmettre aucune donnée.

Pour résoudre ce problème, nous pouvons utiliser une instruction select avec un cas par défaut. Lorsqu'aucun canal n'est prêt, le cas par défaut est déclenché, déclenchant une brève durée de veille. Cela permet de conserver les ressources tout en permettant des tentatives continues d'envoi et de réception de données :

package main

import (
    "fmt"
    "time"
)

func valueToSend() int {
    // Generate a value to send, calculated/acquired each attempt
    return 0
}

func main() {
    s := make(chan

Il faut faire preuve de prudence lorsque l'on se fie aux contrôles de longueur ou de capacité du canal avant d'envoyer ou de recevoir des données. De telles approches peuvent conduire à un comportement inattendu, car l'état du canal peut changer entre la vérification et l'opération d'envoi/réception réelle.

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