Dalam kod Go ini, fungsi test() menjalankan berbilang simulasi secara selari. Walau bagaimanapun, penambahan konkurensi melambatkan program.
Masalahnya terletak pada cara simulasi berinteraksi dengan penjana nombor rawak. Secara lalai, pakej Go rand menggunakan contoh global jenis Rand, dilindungi oleh kunci mutex. Apabila menggunakan fungsi kemudahan rand.Float64(), setiap goroutine mesti memperoleh kunci ini, mewujudkan kesesakan yang memperlahankan atur cara.
Untuk menyelaraskan kod dengan berkesan, buat contoh berasingan jenis Rand untuk setiap goroutine. Ini menghapuskan keperluan untuk kunci mutex dan membolehkan goroutine beroperasi secara bebas.
Kod Contoh:
// Create a new Rand instance for each goroutine source := rand.NewSource(time.Now().UnixNano()) generator := rand.New(source)
Penggunaan:
Lepaskan contoh penjana kepada fungsi seperti interaksi() dan simulasi() untuk menjana nombor rawak tanpa mutex pertikaian kunci.
result := interaction(generator)
Dengan menangani isu kunci mutex, kod tersebut kini boleh memanfaatkan konkurensi sepenuhnya untuk mempercepatkan simulasi.
Atas ialah kandungan terperinci Mengapa Concurrency Memperlahankan Simulasi Penurunan Item Permainan My Go, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!