Maison > Article > développement back-end > Évaluation des performances fonctionnelles des différents modes de communication du pipeline dans Golang
L'impact du mode de communication pipeline sur les performances des fonctions du langage Go : Les pipelines sans tampon ont les pires performances car ils bloquent l'expéditeur. Les tuyaux tamponnés éliminent le blocage de l’expéditeur et fonctionnent nettement mieux que les tuyaux non tamponnés. La sélection de canaux fonctionne mieux et permet une réception efficace des données provenant de plusieurs canaux.
Évaluation des performances des fonctions sous différents modes de communication de pipeline en langage Go
Introduction
Pipeline est une puissante primitive de concurrence en langage Go. Ils permettent un transfert de données sûr et efficace entre des fonctions concurrentes. Cependant, différents modes de communication du pipeline peuvent avoir un impact significatif sur les performances des fonctions. Cet article évaluera trois modèles de communication par canal courants et fournira un exemple pratique pour illustrer leurs différences.
Modes de communication
Nous avons évalué les trois modes de communication du pipeline suivants :
Exemple pratique
Pour évaluer ces modèles de communication, nous avons créé un simple test de fonction d'envoi-réception. Cette fonction redirige un tableau aléatoire vers une autre fonction dans le même espace d'adressage, qui est responsable de l'impression de ce tableau. Nous avons répété les tests en utilisant différents types de pipelines et enregistré le temps d'exécution de chaque test.
Résultats
Nos résultats expérimentaux montrent que :
Exemple de code
Le code suivant démontre l'implémentation du mode de communication de canal tamponné :
import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup ch := make(chan int, 10) // 缓冲区大小为 10 // 发送函数 wg.Add(1) go func() { defer wg.Done() for i := 0; i < 100000; i++ { ch <- i } close(ch) }() // 接收函数 wg.Add(1) go func() { defer wg.Done() for { v, ok := <-ch if !ok { return } fmt.Println(v) } }() wg.Wait() }
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!