Gooutine Belum Selesai di Pintu Keluar Utama atau Cerminan Query Return
Pertimbangkan coretan kod daripada buku bahasa pengaturcaraan Go, di mana goroutin dihasilkan untuk mendapatkan semula respons daripada berbilang URL. Goroutine utama keluar selepas menerima respons terpantas daripada saluran respons. Timbul persoalan: apakah yang berlaku kepada goroutine yang belum selesai apabila goroutine utama atau induk keluar atau kembali?
Keluar Goroutine Utama
Apabila goroutine utama keluar dalam keadaan biasa ( kembali), keseluruhan sistem masa jalan dimatikan. Akibatnya, mana-mana goroutine yang tersekat menunggu untuk dihantar pada saluran yang tidak buffer atau penuh secara tiba-tiba tidak lagi wujud tanpa dibatalkan, dijalankan atau menunggu. Ini serupa dengan kertas kilat yang dinyalakan.
Seseorang mungkin merujuk kepada ini sebagai kebocoran goroutine, serupa dengan sumber yang tidak ditutup atau tidak dibebaskan dalam konteks lain. Walau bagaimanapun, kerana keseluruhan proses ditamatkan, tiada kebocoran sebenar; sumber tidak dikekalkan selama-lamanya. Sistem ini pada asasnya melakukan pembersihan pantas.
Mirrored Query Return dengan Main Goroutine Running
Jika goroutine utama belum keluar dan fungsi mirroredQuery() telah kembali, baki goroutine meneruskan pelaksanaan mereka atau menunggu sehingga mereka menyelesaikan tugas mereka dan kembali. Ini termasuk menunggu jawapan, menghantarnya ke saluran dan mengembalikannya. Apabila kembali, ia ditamatkan dan tersejat.
Saluran itu sendiri kekal wujud, menahan rentetan, yang boleh dianggap sebagai kebocoran sumber kecil. Walau bagaimanapun, kebocoran ini diselesaikan apabila rujukan terakhir kepada saluran itu hilang, menyebabkan saluran (dan kandungannya) menjadi sampah yang dikumpul.
Saluran Tidak Dibuffer
Telah saluran dalam coretan kod telah dinyahbuffer, goroutine yang lebih perlahan akan disekat semasa cuba menghantar ke saluran. Ini akan menghalang penamatan mereka, mengekalkan saluran dan sumber yang diperuntukkan sehingga program tamat. Keadaan ini akan menjadi tidak diingini.
Saluran Penampan dan Kod Paling Bersih
Menggunakan saluran penimbal dalam coretan kod ialah pendekatan paling mudah yang memastikan kefungsian yang diingini tanpa kemungkinan ralat atau kebocoran sumber. Ia membolehkan gorouti yang lebih perlahan menyelesaikan tugas mereka dan ditamatkan dengan anggun.
Kesimpulan
Nasib goroutin yang belum selesai di pintu keluar utama ialah penamatan secara tiba-tiba. Apabila pertanyaan yang dicerminkan kembali semasa goroutine utama masih berjalan, goroutin yang selebihnya menyelesaikan tugas mereka dan menyejat. Menggunakan saluran penimbal menyelesaikan sebarang kemungkinan kebocoran sumber yang berkaitan dengan gorouti yang belum selesai dalam konteks ini.
Atas ialah kandungan terperinci Apa yang Berlaku kepada Goroutine yang Belum Selesai Apabila Rutin Pergi Utama Keluar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!