Menutup Saluran untuk Aplikasi Keluar Bersih dalam Go Menggunakan WaitGroups
Artikel ini menyiasat isu biasa yang dihadapi apabila menggunakan penyegerakan.WaitGroup dan saluran dalam Go program, yang boleh menghalang fungsi utama daripada keluar selepas semua goroutine telah menyelesaikan tugas mereka. Mari kita terokai masalah dan penyelesaiannya.
Masalah: Tunggu Tak Terhingga
Dalam contoh yang disediakan, fungsi utama menggunakan penyegerakan.WaitGroup dan saluran (fetchedSymbols) untuk mengurus gorout serentak yang mengambil dan menyimpan sebut harga saham. Semasa goroutine menyelesaikan tugas mereka, program itu digantung selama-lamanya tanpa keluar.
Isu: Saluran Tidak Tertutup
Penyebabnya ialah gelung julat dalam fungsi utama . Mengulangi saluran fetchedSymbols menyekat kemajuan kerana saluran itu tidak pernah ditutup. Akibatnya, fungsi utama menunggu selama-lamanya untuk nilai baharu dihantar melalui saluran, walaupun semua nilai telah diterima.
Penyelesaian: Menutup Saluran
Untuk menyelesaikan isu ini, adalah penting untuk menutup saluran fetchedSymbols setelah semua goroutine menyelesaikan tugas mereka. Ini memberi isyarat kepada gelung julat bahawa tiada lagi nilai untuk diterima, membenarkan lelaran ditamatkan dan fungsi utama diteruskan.
Satu pendekatan ialah menggunakan kaedah Tunggu penyegerakan.WaitGroup untuk memberi isyarat apabila semua goroutine telah selesai. Satu goroutine boleh dilancarkan untuk menunggu WaitGroup mencapai sifar dan kemudian menutup saluran.
<code class="go">go func() { wg.Wait() close(fetchedSymbols) }()</code>
Dengan pengubahsuaian ini, gelung julat dalam fungsi utama akhirnya akan mencapai penghujung saluran, membenarkan atur cara untuk mencetak mesej "selesai" dan keluar dengan anggun.
Dengan memahami kepentingan menutup saluran apabila bekerja dengan penyegerakan.WaitGroup, pembangun Go boleh memastikan bahawa aplikasi mereka ditamatkan secara dijangka selepas melaksanakan tugasan serentak.
Atas ialah kandungan terperinci Mengapa Aplikasi Go Hang Apabila Menggunakan WaitGroups dan Saluran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!