Traitement parallèle dans Golang : tirer parti de la concurrence pour les performances
Considérez le code fourni, qui présente le traitement parallèle avec des goroutines. Cependant, cela soulève des questions sur le potentiel d'exécution simultanée et sur l'approche optimale pour parvenir au parallélisme.
Exécution simultanée de dowork
Le principe selon lequel dowork s'exécutera en parallèle est pas garanti. Alors que les goroutines fournissent un mécanisme de concurrence léger, le planificateur du système d'exploitation détermine la séquence d'exécution réelle. GOMAXPROCS, selon les notes de version de Go 1.5, s'aligne généralement sur les cœurs disponibles.
Approche suggérée : prévention des blocages et contrôle de la concurrence
Concernant le maintien de l'exécution de la fonction principale , fmt.Scanln peut s'avérer peu fiable, en particulier dans les environnements de production. Au lieu de cela, envisagez d'implémenter un sync.WaitGroup pour vous assurer que toutes les goroutines sont terminées avant de quitter. De plus, pour améliorer le contrôle de la concurrence et garantir une utilisation appropriée des ressources pour les tâches parallèles, il est recommandé d'utiliser des canaux de travail distincts pour chaque goroutine.
Fonction utilitaire pour l'exécution de fonctions parallèles
Pour simplifier l'exécution de fonctions parallèles, vous pouvez exploiter une fonction utilitaire existante comme la suivante :
import "sync"
// Parallelize parallelizes function calls
func Parallelize(functions ...func()) {
var waitGroup sync.WaitGroup
waitGroup.Add(len(functions))
defer waitGroup.Wait()
for _, function := range functions {
go func(f func()) {
defer waitGroup.Done()
f()
}(function)
}
}
Application de cette fonction à l'extrait de code :
func1 := func() { f(0) }
func2 := func() { f(1) }
func3 := func() { f(2) }
Parallelize(func1, func2, func3)
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