Isu: Infinite-Loop Goroutine Blocking HTTP Server
In Go, infinite-loop goroutine dijangka menyekat goroutine lain apabila menggunakan kurang benang daripada teras yang tersedia, walaupun masa jalan.GOMAXPROCS ditetapkan dengan sewajarnya. Walau bagaimanapun, tingkah laku ini berbeza apabila menggunakan pakej net/http.
S: Mengapakah goroutine gelung tak terhingga menyekat pelayan HTTP selepas beberapa seruan?
J: Penjadual masa jalan Go bukan pre-emptive sepenuhnya. Dalam contoh anda, gelung tak terhingga tidak mengandungi panggilan fungsi, menghalang penjadual daripada campur tangan. Ini mengakibatkan pengendalian gelung yang berterusan oleh satu utas, menyekat gorouti lain, termasuk pelayan HTTP.
S: Mengapa masa jalan.LockOSThread() gagal menyelesaikan isu?
J: runtime.LockOSThread() bertujuan untuk memastikan bahawa gelung kosong berjalan secara berasingan benang. Walau bagaimanapun, sifat bukan preemptif penjadual menjadikan pendekatan ini tidak berkesan dalam kes ini.
Penyelesaian:
Atas ialah kandungan terperinci Mengapakah Infinite Loop Goroutine Menyekat Pelayan HTTP Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!