Maison > Article > développement back-end > Comment obtenir un véritable parallélisme dans Golang : goroutines, blocages et canaux ?
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 atteindre le 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, on peut exploiter une fonction utilitaire existante comme la suivante :
<code class="go">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) } }</code>
Application de cette fonction à l'extrait de code :
<code class="go">func1 := func() { f(0) } func2 := func() { f(1) } func3 := func() { f(2) } Parallelize(func1, func2, func3)</code>
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!