Rumah >pembangunan bahagian belakang >Golang >Mengapa Concurrency Memperlahankan Simulasi Penurunan Item Permainan My Go, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Concurrency Memperlahankan Simulasi Penurunan Item Permainan My Go, dan Bagaimana Saya Boleh Membetulkannya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-13 22:16:21645semak imbas

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

Mengapakah penambahan concurrency memperlahankan kod Go yang menyerupai item dalam permainan jatuh?

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.

Penyelesaian: Cipta Penjana Nombor Rawak Berasingan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn