Maison >développement back-end >Golang >Pourquoi la concurrence ralentit-elle la simulation de suppression d'objets de jeu Go et comment puis-je y remédier ?

Pourquoi la concurrence ralentit-elle la simulation de suppression d'objets de jeu Go et comment puis-je y remédier ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-13 22:16:21646parcourir

Why Does Concurrency Slow Down My Go Game Item Drop Simulation, and How Can I Fix It?

Pourquoi l'ajout de la concurrence ralentit-il le code Go qui simule les chutes d'objets dans le jeu ?

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.

Solution : créer des générateurs de nombres aléatoires séparés

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn