Rumah > pembangunan bahagian belakang > Golang > Mengapa Menambah Concurrency Memperlahankan Kod My Go?

Mengapa Menambah Concurrency Memperlahankan Kod My Go?

DDD
Lepaskan: 2024-12-11 11:10:13
asal
405 orang telah melayarinya

Why Did Adding Concurrency Slow Down My Go Code?

Concurrency Memperlahankan Kod Golang

Dalam usaha untuk mengoptimumkan simulasi kod interaksi dengan raksasa dan kejatuhan item, concurrency telah diperkenalkan, secara mengejutkan menjejaskan prestasi negatif.

Kod asal, tanpa konkurensi, mempunyai tiga fungsi utama: interaksi, simulasi dan ujian. interaksi mensimulasikan satu interaksi dan mengembalikan 1 untuk kejatuhan item atau 0 sebaliknya. simulasi melaksanakan berbilang interaksi dan menyimpan hasilnya dalam kepingan. ujian menjalankan satu siri simulasi dan menyimpan jumlah bilangan interaksi yang berjaya dalam sekeping.

Apabila konkurensi ditambah, goroutin dicipta untuk setiap ujian, dengan setiap goroutine berjalan dengan salinan simulasinya sendiri. Walau bagaimanapun, prestasi bertambah buruk dan bukannya bertambah baik.

Sebab Kelembapan

Isu terletak pada fungsi rand.Float64(), yang menggunakan objek global dikongsi dengan Mutex kunci. Secara lalai, setiap goroutine akan memperoleh kunci Mutex ini apabila memanggil rand.Float64(), akhirnya memperlahankan prestasi.

Penyelesaian

Untuk membetulkannya, rand yang berasingan. Contoh baru () telah dibuat untuk setiap CPU. Ini telah menghapuskan masalah kunci Mutex yang dikongsi dan meningkatkan prestasi dengan ketara.

Penambahbaikan Tambahan

Peningkatan prestasi selanjutnya dicapai dengan menggantikan fungsi kemudahan rand.Float64() dengan langsung memanggil struct Rand. Fungsi kemudahan menggunakan contoh Rand yang dilindungi mutex global, manakala panggilan terus mengelakkan overhed ini.

Kesimpulan

Walaupun konkurensi boleh meningkatkan prestasi untuk masalah tertentu, pelaksanaan yang betul adalah penting. Dalam kes ini, menggunakan rand.New() yang berasingan dan mengelakkan kunci Mutex dikongsi adalah kunci untuk meminimumkan kemerosotan prestasi.

Atas ialah kandungan terperinci Mengapa Menambah Concurrency Memperlahankan Kod My Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan