Mengapa Go Runtime Tidak Melaksanakan Pernyataan Serentak Secara Selari?
Soalan:
Saya menjalankan program Go yang tidak menggunakan berbilang teras CPU walaupun mempunyai akses kepadanya. Saya menggunakan goroutine untuk melaksanakan tugas serentak, tetapi mereka melaksanakan secara berurutan. Apakah yang boleh menyebabkan tingkah laku ini?
Jawapan:
Terdapat dua kemungkinan penjelasan untuk isu ini:
-
Persekitaran GOMAXPROCS pembolehubah: Pembolehubah GOMAXPROCS mengawal bilangan CPU yang dibenarkan untuk digunakan oleh masa jalan Go. Secara lalai, pembolehubah ini ditetapkan kepada 1, yang bermaksud bahawa masa jalan akan menggunakan hanya satu CPU. Untuk mendayakan pemprosesan selari, anda perlu menetapkan GOMAXPROCS kepada nilai yang lebih besar daripada 1. Anda boleh melakukan ini sama ada dengan menetapkan pembolehubah persekitaran atau menggunakan fungsi runtime.GOMAXPROCS dalam kod anda.
-
Komunikasi saluran: Jika gorouti anda menghabiskan banyak masa untuk berkomunikasi antara satu sama lain melalui saluran, menggunakan berbilang teras CPU sebenarnya boleh menghalang prestasi. Ini kerana komunikasi saluran melibatkan penukaran konteks, yang boleh menambah overhed. Dalam kes sedemikian, adalah lebih cekap untuk menggunakan satu teras CPU untuk semua goroutine.
Atas ialah kandungan terperinci Mengapa My Go Goroutines Tidak Berjalan Selari?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!