Nasib Goroutine yang Belum Selesai Semasa Keluar atau Kembali Goroutine Utama
Dalam kod sampel yang disediakan, Goroutines dicipta untuk mengendalikan permintaan kepada pelayan yang berbeza. Gorout utama, mirroredQuery, mengembalikan respons terpantas. Timbul persoalan: Apakah yang berlaku kepada rutin yang belum selesai (satu atau dua) apabila mirroredQuery selesai?
Penamatan Mengejut dalam Pengembalian Goroutine Utama
Apabila goroutine utama kembali, ia mencetuskan penutupan mendadak sistem masa jalan. Ini membayangkan bahawa mana-mana gorout sedia ada yang menunggu komunikasi pada saluran yang tidak buffer atau penuh akan hilang begitu sahaja tanpa pembatalan atau penamatan. Mereka tidak aktif berlari atau menunggu; sebaliknya, ia tidak lagi wujud apabila goroutine utama ditamatkan. Fenomena ini boleh dikategorikan sebagai kebocoran goroutine, tetapi ia dapat dikurangkan oleh fakta bahawa keseluruhan proses sedang ditamatkan.
Kesinambungan Goroutines Semasa Main Goroutine Runtime
Walau bagaimanapun , jika goroutine utama kekal aktif (iaitu, tidak dikembalikan), goroutine lain terus beroperasi. Mereka sama ada menyelesaikan tugas mereka dan mengembalikan atau melaksanakan tindakan yang menyebabkan penamatan. Dalam contoh yang diberikan, rutin yang belum selesai mendapatkan semula respons, menghantarnya ke saluran dan kembali. Rutin ini hilang apabila selesai dan kembali.
Kegigihan Saluran dan Kebocoran Sumber
Saluran berterusan selepas mirroredQuery kembali dan ia mengekalkan rentetan yang diterima daripada goroutine. Ini boleh dianggap sebagai kebocoran sumber kecil, terutamanya dalam program kecil. Jika tiada rujukan lain wujud pada saluran itu, ia akhirnya akan dikumpul sampah, bersama-sama dengan kandungannya.
Perbandingan dengan Saluran Tidak Penimbal dan Saluran Tertutup
Dalam kes ini daripada saluran yang tidak dibuffer, goroutin yang "kehilangan" akan disekat semasa cuba menghantar ke saluran penuh. Akibatnya, gorout ini dan saluran itu sendiri akan berterusan sehingga penamatan program. Menutup saluran akan menyebabkan gorout yang "kehilangan" panik, dengan berkesan membunuh program. Oleh itu, menggunakan saluran penimbal memudahkan kod sambil mengelakkan senario yang tidak diingini ini.
Atas ialah kandungan terperinci Apa yang Berlaku kepada Goroutine yang Belum Selesai Apabila Goroutine Utama Keluar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!