首頁 > 後端開發 > Golang > 為什麼並發會減慢我的圍棋物品掉落模擬速度,如何解決?

為什麼並發會減慢我的圍棋物品掉落模擬速度,如何解決?

Mary-Kate Olsen
發布: 2024-12-13 22:16:21
原創
645 人瀏覽過

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

為什麼加入並發會減慢模擬遊戲內物品掉落的 Go 程式碼?

在此 Go 程式碼中,test() 函數並行執行多個模擬。然而,添加並發會降低程式速度。

問題在於模擬如何與隨機數產生器互動。預設情況下,Go rand 套件使用 Rand 類型的全域實例,並受互斥鎖保護。當使用便利函數 rand.Float64() 時,每個 goroutine 都必須取得此鎖,從而產生了減慢程式速度的瓶頸。

解決方案:建立單獨的隨機數產生器

並行化程式碼實際上,為每個 goroutine 建立一個單獨的 Rand 類型實例。這消除了對互斥鎖的需要,並允許 goroutine 獨立運行。

範例程式碼:

// Create a new Rand instance for each goroutine
source := rand.NewSource(time.Now().UnixNano())
generator := rand.New(source)
登入後複製

用法:

將生成器實例傳遞給互動()和模擬()和模擬( )等函數以產生沒有互斥鎖的隨機數鎖爭用。

result := interaction(generator)
登入後複製

透過解決互斥鎖問題,程式碼現在可以充分利用並發性來加速模擬。

以上是為什麼並發會減慢我的圍棋物品掉落模擬速度,如何解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板