In this Go code, the test() function runs multiple simulations in parallel. However, adding concurrency slows down the program.
The problem lies in how the simulations interact with the random number generator. By default, the Go rand package uses a global instance of the Rand type, protected by a mutex lock. When using the convenience function rand.Float64(), each goroutine must acquire this lock, creating a bottleneck that slows down the program.
To parallelize the code effectively, create a separate instance of the Rand type for each goroutine. This eliminates the need for mutex locks and allows the goroutines to operate independently.
Example Code:
// Create a new Rand instance for each goroutine source := rand.NewSource(time.Now().UnixNano()) generator := rand.New(source)
Usage:
Pass the generator instance to functions like interaction() and simulation() to generate random numbers without mutex lock contention.
result := interaction(generator)
By addressing the mutex lock issue, the code can now fully leverage concurrency to speed up the simulations.
The above is the detailed content of Why Does Concurrency Slow Down My Go Game Item Drop Simulation, and How Can I Fix It?. For more information, please follow other related articles on the PHP Chinese website!