Dans ce code Go, la fonction test() exécute plusieurs simulations en parallèle. Cependant, l'ajout de concurrence ralentit le programme.
Le problème réside dans la manière dont les simulations interagissent avec le générateur de nombres aléatoires. Par défaut, le package Go rand utilise une instance globale de type Rand, protégée par un verrou mutex. Lors de l'utilisation de la fonction pratique rand.Float64(), chaque goroutine doit acquérir ce verrou, créant un goulot d'étranglement qui ralentit le programme.
Pour paralléliser le code effectivement, créez une instance distincte du type Rand pour chaque goroutine. Cela élimine le besoin de verrous mutex et permet aux goroutines de fonctionner indépendamment.
Exemple de code :
// Create a new Rand instance for each goroutine source := rand.NewSource(time.Now().UnixNano()) generator := rand.New(source)
Utilisation :
Passez l'instance du générateur à des fonctions comme interaction() et simulation() pour générer des nombres aléatoires sans verrouillage mutex contention.
result := interaction(generator)
En résolvant le problème du verrouillage mutex, le code peut désormais exploiter pleinement la concurrence pour accélérer les simulations.
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!