Hentikan Pelaksanaan Goroutine pada Tamat Masa: Had Model Gabungan Garpu
Dalam model konkurensi gabungan garpu Go, pelaksanaan goroutine tidak boleh diganggu sekali dimulakan. Walaupun tamat masa boleh ditetapkan untuk membaca daripada saluran, ia tidak menghentikan pelaksanaan penulisan gorouti ke saluran.
Contoh yang Diterangkan
Dalam kod yang disediakan :
- Fungsi Cari mencipta saluran penimbal dan melancarkan goroutine untuk menghantar respons selepas 10 saat.
- Pernyataan pilihan mempunyai dua kes: menerima daripada saluran atau tamat masa selepas 50 milisaat.
- Groutine akhirnya menghantar respons walaupun selepas tamat masa, membawa kepada output yang diingini bukan sedang dicapai.
Memahami Had
Ketidakupayaan untuk mengganggu gorouti berpunca daripada model cantuman garpu Go:
- Gorotin bercabang dari utas utama, berjalan serentak tanpa kawalan langsung.
- Mata sertai, seperti komunikasi saluran, adalah satu-satunya keadaan di mana penyegerakan berlaku.
- Tama masa yang ditetapkan pada penerima saluran tidak mempunyai kesan ke atas pelaksanaan gorouti pengirim.
Pendekatan Alternatif
Memandangkan gangguan langsung berlaku tidak mungkin, pendekatan alternatif mungkin digunakan:
-
Pembatalan Konteks: Kaitkan konteks dengan goroutine dan batalkannya pada tamat masa, menyebabkan goroutine menerima isyarat untuk ditamatkan.
-
Proses Asing: Mulakan goroutine dalam proses berasingan dan tamatkannya jika perlu.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menghentikan Go Goroutine sebelum siap selepas tamat masa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!