Rumah > pembangunan bahagian belakang > Golang > Mengapa Program My Go Membeku Walaupun Menetapkan `runtime.GOMAXPROCS(2)`?

Mengapa Program My Go Membeku Walaupun Menetapkan `runtime.GOMAXPROCS(2)`?

Barbara Streisand
Lepaskan: 2024-12-13 12:37:10
asal
749 orang telah melayarinya

Why Does My Go Program Freeze Despite Setting `runtime.GOMAXPROCS(2)`?

GOMAXPROCS Ditetapkan kepada 2, Tetapi Program Kekal Terjejas

Walaupun menetapkan masa jalan.GOMAXPROCS(2), program menghadapi masalah penggantungan semasa mengeluarkan nombor . Walaupun penggunaan CPU yang tinggi diperhatikan, punca kerosakan itu masih sukar difahami.

Kod yang disediakan mempunyai dua goroutine: forever(), gelung sibuk dan show(), yang mencetak nombor dalam gelung yang tidak berkesudahan. Fungsi utama menetapkan GOMAXPROCS untuk menggunakan dua teras CPU. Walau bagaimanapun, program menjadi tidak bertindak balas.

Isu ini terletak pada operasi berterusan selama-lamanya(). Dengan berjalan secara berterusan, ia menggunakan seluruh rangkaian OS dan mengganggu penjadualan goroutine masa jalan. Dalam Go 1.5 secara khusus, ia menghalang fasa henti dunia pengumpulan sampah.

Untuk menyelesaikan masalah ini, gelung sibuk dalam forever() boleh digantikan dengan fungsi yang menghasilkan CPU dengan kerap. Sebagai alternatif, ia boleh dialih keluar sama sekali, kerana gelung tidak berkesudahan tidak diperlukan.

Sebagai contoh, mengubah suai forever() seperti berikut menyelesaikan masalah:

func forever() {
    for {
        runtime.Gosched()
    }
}
Salin selepas log masuk

Dengan memperkenalkan titik penjadualan ke dalam gelung, goroutine boleh melepaskan kawalan dan membenarkan goroutine lain untuk dilaksanakan. Ini memastikan semua goroutine, termasuk yang bertanggungjawab untuk fungsi teras, boleh berjalan dengan cekap.

Atas ialah kandungan terperinci Mengapa Program My Go Membeku Walaupun Menetapkan `runtime.GOMAXPROCS(2)`?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan