Ce problème consiste à optimiser une fonction Go pour calculer la moyenne mobile d'une tranche. La fonction est intrinsèquement parallèle et embarrassante, ce qui signifie qu'elle peut être facilement divisée en tâches indépendantes qui peuvent être exécutées simultanément.
Le développeur a tenté de paralléliser la fonction à l'aide de goroutines en deux façons :
Les benchmarks ont montré que les deux approches concurrentes fonctionnaient moins bien que la fonction série d'origine moving_avg_serial4.
La raison pour laquelle moving_avg_concurrent2 ne s'adapte pas est que les frais généraux liés à la création et à la gestion des goroutines l'emportent sur les avantages du parallélisme. Dans ce cas, les frais généraux incluent le temps consacré à la création et à la planification des goroutines, ainsi que le temps consacré à la communication et à la synchronisation entre les goroutines.
Le paradigme maître/ouvrier introduit une surcharge supplémentaire par rapport à l'approche goroutine directe. Dans moving_avg_concurrent3, il est nécessaire de créer un canal de communication entre les goroutines maître et travailleur, et de gérer l'envoi et la réception des unités de travail. Cette surcharge dégrade encore davantage les performances de la fonction.
Oui, il est possible que la surcharge de goroutine puisse avoir un impact significatif sur les performances d'un programme. Les Goroutines sont des threads légers, mais ils entraînent néanmoins une certaine surcharge associée à leur création, leur planification et leur synchronisation. Dans le cas de moving_avg_concurrent3, la surcharge liée à la gestion du canal et à la communication maître/travailleur s'ajoute au temps d'exécution de la fonction.
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!